Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL में Sqlalchemy बल्क अपडेट बहुत धीमी गति से काम करता है

आप एक ट्रिक के साथ बल्क अपडेट ऑपरेशंस को तेज कर सकते हैं, भले ही डेटाबेस-सर्वर (जैसे आपके मामले में) में बहुत खराब लेटेंसी हो। अपनी तालिका को सीधे अपडेट करने के बजाय, आप एक मंच-तालिका . का उपयोग करते हैं अपना नया डेटा बहुत तेज़ी से सम्मिलित करने के लिए, फिर गंतव्य-तालिका में एक बार शामिल होने का अद्यतन करें . इसका यह भी फायदा है कि आप डेटाबेस को भेजने के लिए बयानों की संख्या को काफी नाटकीय ढंग से कम कर देते हैं।

यह UPDATEs के साथ कैसे काम करता है?

मान लें कि आपके पास एक टेबल है entries और आपके पास हर समय नया डेटा आ रहा है, लेकिन आप केवल उन्हीं को अपडेट करना चाहते हैं जो पहले से संग्रहीत हैं। आप अपनी गंतव्य-तालिका entries_stage . की एक प्रति बनाते हैं इसमें केवल प्रासंगिक क्षेत्रों के साथ:

entries = Table('entries', metadata,
    Column('id', Integer, autoincrement=True, primary_key=True),
    Column('value', Unicode(64), nullable=False),
)

entries_stage = Table('entries_stage', metadata,
    Column('id', Integer, autoincrement=False, unique=True),
    Column('value', Unicode(64), nullable=False),
)

फिर आप अपना डेटा बल्क-इन्सर्ट के साथ डालें। यदि आप MySQL के मल्टीपल वैल्यू इंसर्ट सिंटैक्स का उपयोग करते हैं, तो इसे और भी तेज किया जा सकता है, जो मूल रूप से SQLAlchemy द्वारा समर्थित नहीं है, लेकिन इसे बिना किसी कठिनाई के बनाया जा सकता है।

INSERT INTO enries_stage (`id`, `value`)
VALUES
(1, 'string1'), (2, 'string2'), (3, 'string3'), ...;

अंत में, आप गंतव्य-तालिका के मानों को चरण-तालिका के मानों के साथ इस प्रकार अपडेट करते हैं:

 UPDATE entries e
 JOIN entries_stage es ON e.id = es.id
 SET e.value = es.value;

फिर आपका काम हो गया।

आवेषण के बारे में क्या?

यह निश्चित रूप से आवेषण को गति देने के लिए भी काम करता है। जैसा कि आपके पास पहले से ही स्टेज-टेबल . में डेटा है , आपको बस एक INSERT INTO ... SELECT . जारी करना है विवरण, डेटा के साथ जो गंतव्य-तालिका . में नहीं है अभी तक।

INSERT INTO entries (id, value)
SELECT FROM entries_stage es
LEFT JOIN entries e ON e.id = es.id
HAVING e.id IS NULL;

इसके बारे में अच्छी बात यह है कि आपको INSERT IGNORE करने की जरूरत नहीं है , REPLACE या ON DUPLICATE KEY UPDATE , जो आपकी प्राथमिक कुंजी को बढ़ाएगी, भले ही वे कुछ न करें




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP/MySQL - पहले से ऑटो जेनरेट की गई तालिका में एक पंक्ति के लिए स्वत:उत्पन्न लिंक कैसे हटाएं?

  2. रिकॉर्ड से HTML टैग हटाएं

  3. async और नोड js . में MySQL कॉल पर प्रतीक्षा करें

  4. जेसन की मदद से PHP, MySql का उपयोग करके एंड्रॉइड में उपयोगकर्ता लॉगिन क्रेडेंशियल्स को कैसे सत्यापित करें?

  5. अपने डेटाबेस के लिए MySQL डेटाबेस आकार कैसे प्राप्त करें?