বড় ব্যাচগুলির জন্য গতি sertোকান


10

আমার আবেদনে, আমার INSERTs সময়ের বেশিরভাগ অংশ নিচ্ছে বলে মনে হচ্ছে। আমার স্মৃতিতে প্রচুর পরিমাণে অবজেক্ট রয়েছে (40-50,000 ডলার) যা আমি একটি টেবিলের মধ্যে sertোকাতে চাই।

একটি নমুনা টেবিল নিতে দেয়

CREATE TABLE bill (
id BIGINT(20) PRIMARY KEY,
amount INT(11) DEFAULT 0,
bill_date DATETIME DEFAULT NOW(),
INDEX (bill_date)
) ENGINE=InnoDB

3 টি সারি আমার ব্যাচের আকার হিসাবে নেওয়া, নীচে প্রবেশের জন্য ভাবতে পারি এমন পদ্ধতিগুলি

পদ্ধতির 1 - 3 টি কাঁচা সন্নিবেশ তৈরি এবং ফায়ার করুন

INSERT INTO bill (amount, bill_date) VALUES (10, '2012-01-01 00:00:00');
INSERT INTO bill (amount, bill_date) VALUES (20, '2012-01-02 00:00:00');
INSERT INTO bill (amount, bill_date) VALUES (40, '2013-02-05 00:00:00');

পদ্ধতির 2 - মানগুলিকে 1 ক্যোয়ারিতে ক্লাব করা

INSERT INTO bill (amount, bill_date) VALUES 
(10, '2012-01-01 00:00:00'),
(20, '2012-01-02 00:00:00'),
(40, '2013-02-05 00:00:00');

পদ্ধতির 3 - 6 বারের পরামিতিগুলি অতিক্রম করে 1 বার এই ক্যোয়ারী ফায়ার করুন

INSERT INTO bill (amount, bill_date) VALUES 
(?, ?), (?, ?), (?, ?);

পদ্ধতির 4 - প্রতি বার 2 টি প্যারামিটার পরিবর্তন করে এই প্রস্তুত ক্যোয়ারিকে 3 বার ফায়ার করুন

INSERT INTO bill (amount, bill_date) VALUES (?, ?);

অন্য যে কোনও পন্থা স্বাগত।

আমার প্রশ্ন

কোনও টেবিলে একাধিক সন্নিবেশ করার দ্রুততম উপায় কী?

আমি এই লিঙ্কটি মাইএসকিএল speedোকানোর গতিতে এবং জেডিবিসি প্রোগ্রামিংয়ের এই গাইডটি পড়েছি , তবে আমি কোনও সিদ্ধান্তে আসতে সক্ষম নই।

আমার ক্ষেত্রে -

বর্তমানে আমার টেবিলটিতে 20 ডলার কলাম রয়েছে, যার বেশিরভাগ সংখ্যা, বেশ কয়েকটি ভারচার (60) এবং 1 পাঠ্য কলাম সহ numbers মাইএসকিএল সংস্করণ 5.5। INNODB এ চলছে এবং পূর্ণসংখ্যার প্রাথমিক কীগুলিতে 1 টি সূচক রয়েছে। সমস্ত প্রশ্ন লেনদেন চালানো।

আমি জাভা থেকে আমার প্রশ্নগুলি তৈরি করি এবং কোয়েরিগুলি চালনার জন্য স্প্রিং জেডিবিসি ব্যবহার করি।

আমি বর্তমানে অ্যাপ্রোচ 3 অনুসরণ করছি, ক্যোয়ারী তৈরি করতে সময় লাগে না এমন হিসাবে 20,000 সন্নিবেশ খালি টেবিলের জন্য 10 সেকেন্ড সময় নিচ্ছে।

জিনিসগুলিকে দৃষ্টিকোণে রাখতে, টেবিল থেকে ডেটা আনতে 100-200 মিলিস লাগবে।

আমি কি অনুপস্থিত কিছু আছে? আমি কীভাবে দ্রুত সন্নিবেশগুলি করব?


স্ট্যাক ওভারফ্লো সম্পর্কিত সম্পর্কিত প্রশ্ন: পুনর্লিখনের সাথে মাইএসকিউএল এবং জেডিবিসি = সত্যায়িত
গর্ড থম্পসন

উত্তর:


3

আপনার কমিটগুলি ব্যাচিংয়ের কথা বিবেচনা করুন। একটি ব্যাচের আকার 1024 একটি ভাল শুরু আকার। আপনি আপনার সর্বোত্তম থ্রুপুট না পৌঁছা পর্যন্ত ব্যাচের আকার পরিবর্তন করুন।


1

আপনি কি পরীক্ষা করেছেন বা আপনি যে গন্তব্য ডিবি টেবিলে সন্নিবেশ করছেন সেখানে সূচিগুলি ফেলে দেওয়া সম্ভব হবে, ছোট ছোট বাচ্চা খণ্ডগুলিতে সন্নিবেশ করান (উপরে বর্ণিত অনুকূল হিসাবে) এবং তারপরে গন্তব্য সারণিতে সূচিগুলি পুনর্নির্মাণ করুন সব প্রবেশ একবারে শেষ? নিশ্চিত করার জন্য পরীক্ষার জন্য যথেষ্ট সহজ কিছু হতে পারে।


0

মাইএসকিএল ডকুমেন্ট থেকে কিছু বাল্ক ডেটা লোড করার টিপস সম্ভব কার্যকর। https://dev.mysql.com/doc/refman/5.6/en/optimizing-innodb-bulk-data-loading.html

আপনি কিছু উপায়ে sertোকানোর গতি বাড়াতে পারেন:

- turn off autocommit
- turn off unique check
- turn off foreign check

এই সাহায্য আশা করি!


2
সীমাবদ্ধ চেকগুলি বন্ধ করে দিলে (অনন্য, বিদেশী কী, ...) খুব নিশ্চিত হয়ে নিন যে আপনার ডেটাগুলি সেগুলি ভঙ্গ করে না বা আপনার ডাটাবেসটি সেই বিন্দু থেকে সামঞ্জস্যপূর্ণ অবস্থায় রয়েছে।
ডেভিড স্পিলিট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.