MySQL බල්ක් ඇතුළත් කිරීම: ඉහළ කාර්ය සාධන දත්ත ඇතුළත් කිරීම සඳහා සම්පූර්ණ මාර්ගෝපදේශය

目次

1. Introduction

The Importance of Bulk Insert

MySQL සමඟ වැඩ කරන විට, ඔබට දත්ත විශාල ප්‍රමාණයක් දත්ත ගබඩාවකට කාර්යක්ෂමව ඇතුළත් කිරීම අවශ්‍ය විය හැක. උදාහරණයක් ලෙස, ලොග් දත්ත සුරකිම, දත්ත මාරු කිරීම, හෝ විශාල CSV දත්ත කට්ටලයන් බල්ක් ආකාරයෙන් ආයාත කිරීම. නමුත්, සාමාන්‍ය INSERT ප්‍රකාශන භාවිතා කරමින් එක් එක් රෙකෝඩ් එකක් එක් එක්ව ඇතුළත් කිරීම කාලය ගත කරන අතර කාර්ය සාධනය ගැඹුරු ලෙස අඩු කරයි.

මෙන්න bulk insert ප්‍රයෝජනවත් වන ස්ථානය. Bulk insert ඔබට එක් ප්‍රශ්නයකින් බහු පේළි දත්ත ඇතුළත් කිරීමට ඉඩ දෙන අතර, MySQL කාර්ය සාධනය ගණනාවට වැඩි දියුණු කරයි.

Purpose of This Article

මෙම ලිපිය MySQL bulk insert පිළිබඳ විස්තරාත්මකව පැහැදිලි කරයි—මූලික භාවිතයෙන් අධික තාක්ෂණික ක්‍රම, වැදගත් සැලකිලි, සහ කාර්ය සාධන අභ්‍යන්තර උපදෙස් දක්වා. පැහැදිලි උදාහරණ ඇතුළත් කර ඇති බැවින්, ආරම්භකයන්ටත් මෙම ක්‍රම භාවිතා කර ගැනීමට සහ අදාළ කර ගැනීමට හැකි වේ.

2. Basics of Bulk Insert

What Is Bulk Insert?

Bulk insert යනු MySQL හි එක් ප්‍රශ්නයක් භාවිතා කර බහු පේළි දත්ත ඇතුළත් කිරීමයි. මෙම ක්‍රමය තනි INSERT ප්‍රකාශන නැවත නැවත ක්‍රියාත්මක කිරීමේ වඩා කාර්යක්ෂම වේ.

උදාහරණයක් ලෙස, සාමාන්‍ය INSERT ක්‍රමය පහත පරිදි එක් එක් පේළියක් එක් එක්ව ඇතුළත් කරයි:

INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com');

Bulk insert භාවිතා කරමින්, ඒම දත්ත එකම ප්‍රකාශනයකින් ඇතුළත් කළ හැකිය:

INSERT INTO users (name, email) VALUES 
('Alice', 'alice@example.com'), 
('Bob', 'bob@example.com');

Advantages of Bulk Insert

  1. Improved Performance බහු පේළි එකවර සැකසීමෙන් ප්‍රශ්න ක්‍රියාත්මක කිරීමේ ගණන අඩු වේ, ජාල සන්නිවේදනය සහ තැටි I/O පූර්ණභාරය අඩු කරයි.
  2. Simplified Transaction Management බහු පේළි එකම ගනුදෙනුවකින් සැකසිය හැකි බැවින් දත්ත සමගිත්වය රැක ගැනීම පහසු වේ.
  3. Cleaner Code පුනරාවර්තන කේතය අඩු කර, නඩත්තු කිරීමේ හැකියාව වැඩි කරයි.

Common Use Cases for Bulk Insert

  • නිතර ලොග් දත්ත විශාල ප්‍රමාණයෙන් සුරකිම
  • බාහිර පද්ධතිවලින් දත්ත ආයාත කිරීම (උදා. CSV ගොනු කියවීම)
  • දත්ත මාරු කිරීම සහ බැකප් ප්‍රතිස්ථාපන කාර්යයන්

3. Methods for Bulk Insert in MySQL

Using Multi-Row INSERT Statements

MySQL බහු-පේළි INSERT වාක්‍ය රචනය භාවිතා කර බච් ඇතුළත් කිරීමේ හැකියාව ලබා දෙයි. මෙම ක්‍රමය සරල이며 බොහෝ අවස්ථා සඳහා සුදුසුය.

Basic Syntax

බහු පේළි එකවර ඇතුළත් කිරීම සඳහා මූලික වාක්‍ය රචනය පහත පරිදි වේ:

INSERT INTO table_name (column1, column2, ...) VALUES 
(value1, value2, ...), 
(value3, value4, ...), 
...;

Example

පහත උදාහරණය users වගුවට පේළි තුනක් ඇතුළත් කරයි:

INSERT INTO users (name, email) VALUES 
('Alice', 'alice@example.com'), 
('Bob', 'bob@example.com'), 
('Charlie', 'charlie@example.com');

Pros and Cons

  • Pros
  • ක්‍රියාත්මක කිරීම සරල이며 SQL සමඟ පළපුරුදු වන අයට තේරුම්ගත හැකි.
  • ගනුදෙනු භාවිතා කර දත්ත සමගිත්වය රැකගත හැක.
  • Cons
  • දත්ත ප්‍රමාණය ඉතා විශාල නම්, ප්‍රශ්නය ප්‍රමාණ සීමාව (පෙරනිමි 1MB) ඉක්මවා යා හැක.

Using the LOAD DATA INFILE Command

LOAD DATA INFILE විධානය පෙළ ගොනුවක (උදා. CSV ආකාර) සිට විශාල ප්‍රමාණයේ දත්ත කාර්යක්ෂමව ඇතුළත් කරයි. ගොනු පූරණය සහාය දක්වන MySQL සේවාදායක පරිසරයන්හි මෙය විශේෂයෙන් ප්‍රයෝජනවත් වේ.

Basic Syntax

LOAD DATA INFILE සඳහා මූලික වාක්‍ය රචනය පහත පරිදි වේ:

LOAD DATA INFILE 'file_path' 
INTO TABLE table_name 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n';

Example

පහත උදාහරණය users.csv ගොනුවේ දත්ත users වගුවට ඇතුළත් කරයි.

  1. CSV File Content
    Alice,alice@example.com
    Bob,bob@example.com
    Charlie,charlie@example.com
    
  1. Executing the Command
    LOAD DATA INFILE '/path/to/users.csv' 
    INTO TABLE users 
    FIELDS TERMINATED BY ',' 
    ENCLOSED BY '"' 
    LINES TERMINATED BY '\n';
    

Pros and Cons

  • වාසි
  • විශාල දත්ත සෙට් සඳහා ඉතා වේගවත් සහ කාර්යක්ෂමයි.
  • දෙඋපකාරකාරී ගොනු මෙහෙයුම් භාවිතා කරයි, එය විශාල පරිමාණ දත්ත ආනයන සඳහා සුදුසු වේ.
  • අවාසි
  • ගොනු මාර්ග සහ අවසර සැකසුම් මත රඳා පවතී.
  • ආරක්ෂාව සඳහා සමහර සේවාදායක LOAD DATA INFILE අක්‍රිය කර ඇත.

mysqlimport උපකරණය භාවිතා කිරීම

mysqlimport යනු MySQL සමඟ ඇතුළත් කර ඇති command-line මෙවලමකි ගොනු වලින් විශාල දත්ත ප්‍රමාණයක් ආනයනය කරයි. එය LOAD DATA INFILE සඳහා wrapper ලෙස ක්‍රියා කරයි.

මූලික ව්‍යාකරණය

mysqlimport --local database_name file_name

උදාහරණය

පහත උදාහරණය users.csv ගොනුව users වගුවට ආනයනය කරයි:

mysqlimport --local --fields-terminated-by=',' --lines-terminated-by='\n' my_database /path/to/users.csv

වාසි සහ අවාසි

  • වාසි
  • command line වලින් ක්‍රියාත්මක කිරීම පහසුයි.
  • LOAD DATA INFILE වලට සමානව වේගවත්යි.
  • අවාසි
  • ගොනු ආකෘතිය වැරදි නම් දෝෂ සිදුවිය හැකියි.
  • SQL එකක් ලියා ගැනීමට සාපේක්ෂව ගැඹුරු හැඳින්වීමක් ලබා ගැනීමට කාලය ගතවිය හැකියි.

4. Bulk Insert හි සලකා බැලීම් සහ සීමාවන්

විමසුම් ප්‍රමාණ සීමා

MySQL හි, එක විමසුමකින් යැවිය හැකි දත්ත ප්‍රමාණය සීමිතයි. මෙම සීමාව max_allowed_packet සැකසුම මගින් පාලනය වේ. අභ්‍යන්තර වටිනාකම 1MB වේ, නමුත් ඔබ විශාල දත්ත ප්‍රමාණයක් ඇතුළත් කරන්නේ නම්, මෙම වටිනාකම වැඩි කිරීමට අවශ්‍ය විය හැකියි.

විසඳුම්

  • සේවාදායක සැකසුම්වල max_allowed_packet වැඩි කරන්න:
    SET GLOBAL max_allowed_packet = 16M;
    
  • ඇතුළත් කිරීම් කුඩා බැච් වලට බෙදන්න (උදා: බැච් එකකට 1,000 පේළි ක්‍රියාත්මක කරන්න).

සුචිකරණවල බලපෑම

බොහෝ සුචිකරණ ඇති වගුවක bulk inserts සිදු කරන විට, MySQL ඇතුළත් කළ එක් එක් පේළිය සඳහා සුචිකරණ යාවත්කාලීන කරයි, එය ක්‍රියාවලිය මන්දගාමී කරයි.

විසඳුම්

  • ඇතුළත් කිරීමට පෙර සුචිකරණ තාවකාලිකව අක්‍රිය කරන්න : ඔබ ගොනුවලින් දත්ත බොහෝමයක් ඇතුළත් කරන්නේ නම්, සුචිකරණ තාවකාලිකව ඉවත් කර ඇතුළත් කිරීම අවසන් වූ පසු ඒවා නැවත නිර්මාණය කිරීම ඵලදායී විය හැකියි.
    ALTER TABLE table_name DISABLE KEYS;
    -- Bulk insert operations
    ALTER TABLE table_name ENABLE KEYS;
    
  • දත්ත ඇතුළත් කළ පසු සුචිකරණ එකතු කරන්න : ඇතුළත් කිරීමෙන් පසු සුචිකරණ නැවත ගොඩනැගීම bulk ලෙස සුචිකරණ නිර්මාණය කිරීමට ඉඩ සලසයි, බොහෝ විට වේගය වැඩි දියුණු කරයි.

ගනුදෙනුකරණ කළමනාකරණය

විශාල දත්ත ප්‍රමාණයක් ඇතුළත් කරන විට, දෝෂ සිදුවිය හැකි අතර සමහර පේළි ඇතුළත් කිරීමට අසමත් විය හැකියි. ගනුදෙනුකරණ භාවිතා කිරීම මෙම තත්ත්වයන්හි ස්ථිරභාවය පවත්වා ගැනීමට උපකාරී වේ.

විසඳුම්

ගනුදෙනුකරණ භාවිතා කරන්න එවිට ඇතුළත් කිරීම සියලු දත්ත සාර්ථකව ඇතුළත් වූ පසු පමණක් commit වේ.

START TRANSACTION;
INSERT INTO table_name ...;
-- Execute all required insert operations
COMMIT;

දෝෂයක් සිදුවුවහොත්, අර්ධ ඇතුළත් කිරීම් වළක්වා ගැනීමට rollback කරන්න.

ROLLBACK;

ආරක්ෂාව සහ අවසර

LOAD DATA INFILE හෝ mysqlimport භාවිතා කරන විට, ඔබට ගොනු කියවීමේ අවසර අවශ්‍යයි. කෙසේ වෙතත්, සමහර සේවාදායක පරිසර මෙම මෙහෙයුම් ආරක්ෂාව සඳහා සීමා කර ඇත.

විසඳුම්

  • සේවාදායකය LOAD DATA INFILE ඉඩ නොදෙන්නේ නම්, client-side LOAD DATA LOCAL INFILE භාවිතා කරන්න.
  • අවශ්‍ය අවසර තහවුරු කරන්න සහ ප්‍රධාන කළමනාකරුගෙන් සුදුසු සැකසුම් යෙදීම ඉල්ලන්න.

අනෙකුත් සටහන්

  • අක්ෂර සෙට් ස්ථිරභාවය : දත්ත ගොනුවේ අක්ෂර සෙට් වගු සැකසුම් සමඟ නොගැලපේ නම්, ඔබට garbled අක්ෂර හෝ දෝෂ දැකිය හැකියි. ඇතුළත් කිරීමට පෙර encoding පරීක්ෂා කරන්න.
  • Deadlock අවදානම : එකම වේලාවේදී බහු ක්‍රියාවලි දත්ත ඇතුළත් කරන්නේ නම්, deadlocks සිදුවිය හැකියි. ඇතුළත් කිරීම් serialization කිරීම මෙය වළක්වා ගැනීමට උපකාරී වේ.

5. Bulk Insert හි හොඳම පිළිවෙත්

ගනුදෙනුකරණ භාවිතා කරන්න

ඉහත සඳහන් පරිදි, ගනුදෙනුකරණ දත්ත ස්ථිරභාවය පවත්වා ගැනීමට උපකාරී වේ. මෙය විශේෂයෙන්ම බහු වගු හරහා දත්ත ඇතුළත් කිරීමේදී භාවිතා වේ.

START TRANSACTION;
-- Execute bulk insert
COMMIT;

සුචිකරණ මෙහෙයුම් ඵලදායී කරන්න

ඇතුළත් කිරීමට පෙර සුචිකරණ අක්‍රිය කිරීම සහ පසුව ඒවා නැවත ගොඩනැගීම ඇතුළත් කිරීමේ වේගය තීව්‍රව වැඩි දියුණු කළ හැකියි.

ALTER TABLE table_name DISABLE KEYS;
-- Execute bulk insert
ALTER TABLE table_name ENABLE KEYS;

සුදුසු බැච් ප්‍රමාණයක් තෝරන්න

When inserting a large amount of data, selecting an appropriate batch size (number of rows per query) maximizes efficiency. In general, 1,000 to 10,000 rows per batch is often considered reasonable.

ප්‍රායෝගික උදාහරණය

බැචිං ඇතුළත් කිරීම 1,000 රචිකා සෑම විටම සාමාන්‍යයෙන් කාර්යක්ෂම වේ:

INSERT INTO users (name, email) VALUES
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com'),
... -- about 1000 rows
;

ඇතුළත් කිරීමට පෙර දත්ත සත්‍යාපනය කරන්න

ඇතුළත් කිරීමට පෙර දත්ත ආකෘති සහ වටිනාකම් නිවැරදි දැයි පරීක්ෂා කිරීම දෝෂ වැළැක්වීමට උපකාරී වේ.

# Example: Data validation using Python
import csv

with open('users.csv', mode='r') as file:
    reader = csv.reader(file)
    for row in reader:
        # Check whether the format is valid
        if '@' not in row[1]:
            print(f"Invalid email format: {row[1]}")

දෝෂ කළමනාකරණය ක්‍රියාත්මක කරන්න

අසාර්ථකත්වයන්ට සූදානම් වීම සඳහා, දෝෂ ලොග් පිටපත් කිරීම මගින් ඩिबගිං සহज වේ.

LOAD DATA INFILE '/path/to/users.csv'
INTO TABLE users
LOG ERRORS INTO 'error_log';

6. බල්ක් ඇතුළත් කිරීමේ කාර්ය සාධනය සකස් කිරීම

බැච් ප්‍රමාණය ඔප්ටිමයිස් කරන්න

ප්‍රශ්නයකින් ඇතුළත් කරන රචිකා සංඛ්‍යාව (බැච් ප්‍රමාණය) කාර්ය සාධනයට ප්‍රධාන බලපෑමක් ඇති කරයි. සුදුසු ප්‍රමාණයක් තෝරා ගැනීම නෙට්වර්ක් සන්නිවේදනය සහ ඩිස්ක් I/O ඕවර්හෙඩ් අඩු කරයි, එමගින් වඩාත් කාර්යක්ෂම ඇතුළත් කිරීම් සක්‍රීය වේ.

හොඳම පිළිවෙත්

  • අනුරූප කළ යුතු ප්‍රමාණය : සාමාන්‍යයෙන් බැච් එකකට 1,000 සිට 10,000 දක්වා රචිකා.
  • බැච් ප්‍රමාණය ඉතා කුඩා නම්, ප්‍රශ්න සංඛ්‍යාව වැඩි වේ, එමගින් නෙට්වර්ක් සහ ඩිස්ක් ඕවර්හෙඩ් ඉහළ නැංවේ.
  • බැච් ප්‍රමාණය ඉතා විශාල නම්, max_allowed_packet සීමාවන්ට පහර දිය හැකි අතර මතක භාවිතය වැඩි කරයි.

උදාහරණය

දත්ත වෙන් කර බහුවිධ ධාවණයන්හි ඇතුළත් කරන්න පහත පරිදි දැක්වෙන පරිදි:

INSERT INTO users (name, email) VALUES 
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com'),
... -- up to 1000 rows
;

ඉන්ඩෙක්ස් තාවකාලිකව අක්‍රිය කරන්න

බල්ක් ඇතුළත් කිරීමේදී ඉන්ඩෙක්ස් යාවත්කාලීන කිරීම සෑම ඇතුළත් කිරීමකදීම ඉන්ඩෙක්ස් පුනර්ගණනය ඇති කරයි, එය සැකසුම් වේගය අඩු කරයි.

විසඳුම

  • ඇතුළත් කිරීමට පෙර ඉන්ඩෙක්ස් අක්‍රිය කර ඇතුළත් කිරීම අවසන් වූ පසු ඒවා නැවත ගොඩනගන්න.
    ALTER TABLE table_name DISABLE KEYS;
    -- Execute bulk insert
    ALTER TABLE table_name ENABLE KEYS;
    

ටේබල් ලොක්ස් භාවිතා කරන්න

බල්ක් ඇතුළත් කිරීමේදී ටේබලය තාවකාලිකව ලොක් කිරීම අනෙකුත් ප්‍රශ්න සමඟ ගැටලු වැළැක්වීමට සහ වේගය වැඩි දියුණු කිරීමට හැකිය.

උදාහරණය

LOCK TABLES table_name WRITE;
-- Execute bulk insert
UNLOCK TABLES;

LOAD DATA INFILE ඔප්ටිමයිස් කිරීම

LOAD DATA INFILE බල්ක් ඇතුළත් කිරීමේ වේගවත්ම ක්‍රමවලින් එකක් වන අතර, පහත විකල්ප භාවිතයෙන් කාර්ය සාධනය තවදුරටත් වැඩි දියුණු කළ හැක.

විකල්ප උදාහරණ

  • IGNORE : බෙදාහරින්නා සමාන රචිකා නොසලකා හරින ලද අනෙකුත් ඒවා ඇතුළත් කරන්න.
    LOAD DATA INFILE '/path/to/file.csv' 
    INTO TABLE users 
    IGNORE;
    
  • CONCURRENT : ටේබලය අනෙකුත් ප්‍රශ්න මගින් භාවිතා වන විට බලපෑම අවම කරයි.
    LOAD DATA CONCURRENT INFILE '/path/to/file.csv' 
    INTO TABLE users;
    

MySQL සැකසුම් සකස් කරන්න

  1. innodb_buffer_pool_size InnoDB ටේබල් භාවිතා කරන්නේ නම්, මෙම පරාමිතිය වැඩි කිරීම කියවීම/ලිවීමේ කාර්ය සාධනය වැඩි දියුණු කරයි.
    SET GLOBAL innodb_buffer_pool_size = 1G;
    
  1. bulk_insert_buffer_size MyISAM ටේබල් භාවිතා කරන්නේ නම්, මෙම පරාමිතිය සකස් කිරීම බල්ක් ඇතුළත් කිරීමේ කාර්ය සාධනය වැඩි දියුණු කරයි.
    SET GLOBAL bulk_insert_buffer_size = 256M;
    
  1. තාවකාලිකව autocommit අක්‍රිය කරන්න ඇතුළත් කිරීම් අතරතුර autocommit අක්‍රිය කර, පසුව එය නැවත සක්‍රිය කරන්න.
    SET autocommit = 0;
    -- Execute bulk insert
    COMMIT;
    SET autocommit = 1;
    

සකස් කිරීමට පෙර/පසු කාර්ය සාධන සංසන්දනය

සකස් කිරීමට පෙර සහ පසු කාර්ය සාධනය මැනීම සඳහා පහත ආකාරයේ ස්ක්‍රිප්ට් භාවිතා කළ හැක:

-- Record a timestamp before inserting
SET @start_time = NOW();

-- Execute bulk insert
INSERT INTO users (name, email) VALUES 
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com'),
... -- about 1000 rows

-- Measure execution time
SELECT TIMESTAMPDIFF(SECOND, @start_time, NOW()) AS execution_time;

This allows you to confirm tuning effects with concrete numbers.

7. බල්ක් ඇතුළත් කිරීමේ ප්‍රායෝගික උදාහරණය

උදාහරණය: CSV ගොනුවකින් පරිශීලක දත්ත ඇතුළත් කිරීම

1. දත්ත සූදානම් කිරීම

පළමුව, CSV ආකෘතියේ ඇතුළත් කිරීමට දත්ත සූදානම් කරන්න. මෙම උදාහරණයේ, පරිශීලක තොරතුරු (නම සහ ඊමේල් ලිපිනය) අඩංගු users.csv ගොනුවක් භාවිතා කරයි.

Alice,alice@example.com
Bob,bob@example.com
Charlie,charlie@example.com

2. වගුව සෑදීම

දත්ත ඇතුළත් කිරීමට වගුවක් සෑදන්න.

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE
);

3. බල්ක් ඇතුළත් කිරීම: බහු-පේළි INSERT

කුඩා දත්ත කට්ටල සඳහා, පහත පෙන්වා ඇති පරිදි බහු-පේළි INSERT ප්‍රකාශනය භාවිතා කර දත්ත ඇතුළත් කළ හැක.

INSERT INTO users (name, email) VALUES
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com'),
('Charlie', 'charlie@example.com');

4. බල්ක් ඇතුළත් කිරීම: LOAD DATA INFILE

විශාල දත්ත කට්ටල සඳහා, LOAD DATA INFILE භාවිතය කාර්යක්ෂම ක්‍රමයකි.

විධාන උදාහරණය
LOAD DATA INFILE '/path/to/users.csv'
INTO TABLE users
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'
(name, email);

5. කාර්ය සාධනය මැනීම

ඇතුළත් කිරීමේ කාර්යක්ෂමතාව තහවුරු කිරීමට, සරල කාර්ය සාධන පරීක්ෂණයක් ක්‍රියාත්මක කරන්න.

ස්ක්‍රිප්ට් උදාහරණය
SET @start_time = NOW();

LOAD DATA INFILE '/path/to/users.csv'
INTO TABLE users
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'
(name, email);

SELECT TIMESTAMPDIFF(SECOND, @start_time, NOW()) AS execution_time;

This script outputs the time required for data insertion in seconds.

8. නිතර අසන ප්‍රශ්න

ප්‍ර.1: බල්ක් ඇතුළත් කිරීමේදී “Duplicate entry” දෝෂයක් ලැබේ. එය කෙසේ හසුරවන්නේද?

ප.1:
Duplicate දෝෂයන් ඇතුළත් කරන දත්ත කොටසක් පවතින දත්ත සමඟ ගැලපීමේදී සිදුවේ. පහත ක්‍රම භාවිතයෙන් එය හසුරවන්න.

  1. IGNORE විකල්පය භාවිතා කරන්න Duplicate දෝෂ නොසලකා ඉතිරි පේළි ඇතුළත් කරන්න.
    INSERT IGNORE INTO users (name, email) VALUES 
    ('Alice', 'alice@example.com'), 
    ('Bob', 'bob@example.com');
    
  1. ON DUPLICATE KEY UPDATE භාවිතා කරන්න Duplicate සිදුවූ විට පවතින පේළි යාවත්කාලීන කරන්න.
    INSERT INTO users (name, email) VALUES 
    ('Alice', 'alice@example.com') 
    ON DUPLICATE KEY UPDATE email = VALUES(email);
    

ප්‍ර.2: LOAD DATA INFILE භාවිතා කරන විට “Permission denied” දෝෂයක් ලැබේ. මොකද කළ යුතුද?

ප.2:
MySQL සේවාදායකය LOAD DATA INFILE විධානයට අවසර නොදෙන විට මෙම දෝෂය සිදුවේ. පහත ක්‍රම භාවිතයෙන් එය විසඳන්න.

  1. LOAD DATA LOCAL INFILE භාවිතා කරන්න ගොනුව පාරිභෝගික යන්ත්‍රයෙන් කියවන්නේ නම්, LOCAL විකල්පය භාවිතා කරන්න.
    LOAD DATA LOCAL INFILE '/path/to/users.csv' 
    INTO TABLE users 
    FIELDS TERMINATED BY ',' 
    LINES TERMINATED BY '\n';
    
  1. MySQL සැකසුම් පරීක්ෂා කරන්න සේවාදායකයේ local_infile සක්‍රිය කර ඇතිදැයි තහවුරු කරන්න.
    SHOW VARIABLES LIKE 'local_infile';
    SET GLOBAL local_infile = 1;
    

ප්‍ර.3: බල්ක් ඇතුළත් කිරීමේ කාර්ය සාධනය අපේක්ෂිත ලෙස වැඩි නොවෙයි. මොනවා පරීක්ෂා කළ යුතුද?

ප.3:
පහත කරුණු පරීක්ෂා කර, ඒ අනුව සැකසුම් සුදුසු කරගන්න:

  1. ඉන්ඩෙක්සස් ගණන අඩු කරන්න බල්ක් ඇතුළත් කිරීමේදී ඉන්ඩෙක්සස් තාවකාලිකව අක්‍රිය කිරීම වේගය වැඩි කරයි (ඉහත “ඉන්ඩෙක්සස් වල බලපෑම” බලන්න).

  2. බැච් ප්‍රමාණය සකසන්න දත්ත ප්‍රමාණය අනුව සුදුසු බැච් ප්‍රමාණයක් (සාමාන්‍යයෙන් 1,000 සිට 10,000 පේළි) තෝරන්න.

  3. MySQL සැකසුම් සකසන්න

  • innodb_buffer_pool_size වැඩි කරන්න (InnoDB සඳහා).
  • bulk_insert_buffer_size සකසන්න (MyISAM සඳහා).
  1. වගු ලොක් භාවිතා කරන්න වෙනත් විමසුම් සමඟ ගැටුම් නොවීමට වගුව තාවකාලිකව ලොක් කරන්න.
    LOCK TABLES users WRITE;
    -- Execute bulk insert
    UNLOCK TABLES;
    

ප්‍ර.4: CSV ආකෘති ගැටළු නිසා දෝෂ වේ. නිවැරදි ආකෘතිය කුමක්ද?

ප.4:
CSV පහත අවශ්‍යතා පුරවා ඇතිදැයි තහවුරු කරන්න:

  1. එක් එක් ක්ෂේත්‍රය කොමා ( , ) මගින් වෙන් කරන්න.
    Alice,alice@example.com
    Bob,bob@example.com
    
  1. දත්ත විශේෂ අක්ෂර අඩංගු නම්, නිවැරදිව එස්කේප් කරන්න.
    "Alice O'Conner","alice.o@example.com"
    
  1. අන්තිම පේළිය newline අක්ෂරයකින් අවසන් වන බව සහතික කරන්න.
  • අන්තිම පේළිය newline අක්ෂරයකින් අවසන් නොවේ නම්, එය නොසලකා හරින ලෙස විය හැක.

Q5: දත්ත අඛණ්ඩතාවය රැකගන්නේ කෙසේද?

A5:
ඔබට පහත ක්‍රම භාවිතා කරමින් දත්ත අඛණ්ඩතාවය සහතික කළ හැක:

  1. පරිචල භාවිතා කරන්න සියලු දත්ත සාර්ථකව ඇතුළත් කරන ලද පසු පමණක් Commit කරන්න, අඛණ්ඩතාවය රැකගැනීම සඳහා.
    START TRANSACTION;
    -- Execute bulk insert
    COMMIT;
    
  1. ආදාන දත්ත වලංගු කරන්න ඇතුළත් කිරීමට පෙර, දත්ත ආකෘතිය සහ ද්විත්වයන් පරීක්ෂා කිරීමට ස්ක්‍රිප්ට් හෝ මෙවලම් භාවිතා කරන්න.
  2. දෝෂ ලොග් භාවිතා කරන්න අවලංගු පේළි ලියා ගන්න, පසුව ඒවා නිවැරදි කරන්න, සහ නැවත ඇතුළත් කරන්න.
    LOAD DATA INFILE '/path/to/users.csv'
    INTO TABLE users
    LOG ERRORS INTO 'error_log';
    

9. සාරාංශය

Bulk Insert හි වැදගත්කම

MySQL හි bulk insert යනු විශාල දත්ත ප්‍රමාණයක් කාර්යක්ෂමව ඇතුළත් කිරීම සඳහා බලවත් තාක්ෂණයකි. සම්මත INSERT ප්‍රකාශන භාවිතා කිරීමේදී bulk insert වලට සාපේක්ෂව, bulk insert ප්‍රශ්න ක්‍රියාකාරකම් ප්‍රමාණය අඩු කරයි සහ කාර්ය සාධනය බෙහෙවින් වැඩි දියුණු කළ හැක.

මෙම ලිපිය පහත ප්‍රධාන කරුණු විස්තරාත්මකව ආවරණය කළේය:

  1. Bulk Insert මූලික සංකල්ප
  • මූලික සංකල්ප සහ සාමාන්‍ය භාවිතා අවස්ථා.
  1. ප්‍රායෝගික ක්‍රියාත්මක ක්‍රම
  • multi-row INSERT, LOAD DATA INFILE , සහ mysqlimport භාවිතා කරමින් දත්ත ඇතුළත් කිරීම.
  1. ** සලකා බැලීම් සහ සීමාවන්**
  • ප්‍රශ්න ප්‍රමාණය සීමා, සුඛුම්‍යකරණ බලපෑම්, සහ අවසර/ආරක්ෂාවේ ගැටලු, ඒවායේ විසඳුම් සමඟ.
  1. කාර්ය සාධන ටියුනිං
  • බැච් ප්‍රමාණ ආශ්‍රිත කිරීම, වගු ලොක් භාවිතා කිරීම, සහ MySQL සැකසුම් සකස් කිරීම.
  1. ප්‍රායෝගික උදාහරණයක්
  • නියැදි දත්ත සමඟ සැකසුම් පියවර සහ කාර්ය සාධන මැනීම.
  1. FAQ
  • සාමාන්‍ය මෙහෙයුම් ගැටලු සහ විසඳුම්.

ඔබේ පරිසරයේ එය උත්සාහ කරන්න

මෙම ලිපියේ හඳුන්වා දුන් ක්‍රම භාවිතා කරමින්, ඔබට bulk insert සමඟ ක්ෂණිකව පරීක්ෂණ කිරීම ආරම්භ කළ හැක. පහත පියවර උත්සාහ කරන්න:

  1. කුඩා දත්ත සෙට් එකක් සූදානම් කර multi-row INSERT සමඟ පරීක්ෂා කරන්න.
  2. විශාල දත්ත සෙට් සඳහා, LOAD DATA INFILE උත්සාහ කර කාර්ය සාධනය මැනීම.
  3. අවශ්‍ය නම්, පරිචල සහ දෝෂ කළමනාකරණ එකතු කරන්න සහ නිෂ්පාදන පරිසරවලට යෙදෙන්න.

වැඩිදුර ඉගෙනීම

වඩාත් උසස් භාවිතය සහ විස්තර සඳහා, පහත සම්පත් සඳහා වර්තමානය කරන්න:

අවසාන සටහන්

MySQL bulk insert නිවැරදිව භාවිතා කළ විට දත්තගබඩා කාර්යක්ෂමතාව තීව්‍රව වැඩි දියුණු කළ හැක. මෙහි ඉගෙන ගත් දේ භාවිතා කර ඔබේ පද්ධතියේ කාර්ය සාධනය වැඩි දියුණු කරන්න සහ වඩා හොඳ දත්ත කළමනාකරණය කරගන්න.