1 पॉइंट द्वारा GN⁺ 2025-05-02 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • यह SQLite डेटाबेस को कंप्यूटरों के बीच अधिक तेज़ी से कॉपी करने के तरीके की व्याख्या करता है
  • डेटाबेस के इंडेक्स कॉपी की गति धीमी होने का मुख्य कारण हैं
  • SQLite के .dump कमांड का उपयोग करके डेटाबेस को एक टेक्स्ट फ़ाइल में डंप किया जा सकता है
  • टेक्स्ट फ़ाइल मूल डेटाबेस से छोटी होती है, और compress करने पर और भी छोटी हो जाती है
  • यह तरीका बड़े डेटाबेस को अधिक तेज़ी और विश्वसनीयता के साथ कॉपी करने में मदद करता है

कंप्यूटरों के बीच SQLite डेटाबेस को तेज़ी से कॉपी करने का तरीका

  • यह remote server पर संग्रहीत SQLite डेटाबेस को local computer पर कॉपी करने के तरीके की व्याख्या करता है
  • शुरुआती प्रोजेक्ट में rsync कमांड का उपयोग करके इसे आसानी से कॉपी किया जा सकता है
  • जैसे-जैसे डेटाबेस बड़ा होता है, कॉपी की गति धीमी होती जाती है और विश्वसनीयता घटती है

डेटाबेस डंप को टेक्स्ट फ़ाइल में बनाना

  • SQLite, .dump कमांड का उपयोग करके डेटाबेस को टेक्स्ट फ़ाइल में डंप कर सकता है
  • यह टेक्स्ट फ़ाइल SQL statements से बनी होती है और मूल डेटाबेस से छोटी हो सकती है
  • टेक्स्ट फ़ाइल में इंडेक्स एक single line में सिमट जाते हैं, जिससे स्टोरेज स्पेस बच सकता है

compression से स्टोरेज स्पेस बचाना

  • टेक्स्ट फ़ाइल को compress करने पर उसका आकार और छोटा हो जाता है
  • उदाहरण के लिए, अगर मूल SQLite डेटाबेस 3.4GB है, तो gzip से compress की गई टेक्स्ट फ़ाइल 240MB तक घट सकती है
  • compress की गई टेक्स्ट फ़ाइल डाउनलोड करने पर डेटाबेस की कॉपी काफ़ी तेज़ हो जाती है

नया ssh+rsync कमांड

  • सर्वर पर gzip से compress की गई टेक्स्ट फ़ाइल बनाई जाती है, उसे local computer पर कॉपी किया जाता है, और फिर डेटाबेस को दोबारा बनाया जाता है
  • सर्वर पर compress की गई टेक्स्ट फ़ाइल बनाना: ssh username@server "sqlite3 my_remote_database.db .dump | gzip -c > my_remote_database.db.txt.gz"
  • फ़ाइल को local computer पर कॉपी करना: rsync --progress username@server:my_remote_database.db.txt.gz my_local_database.db.txt.gz
  • decompress करके डेटाबेस को फिर से बनाना और उसके बाद local फ़ाइल हटा देना

डेटाबेस डंप एक विश्वसनीय कॉपी source है

  • अगर डेटाबेस कॉपी करते समय उसमें update होता है, तो rsync एक गलत डेटाबेस फ़ाइल बना सकता है
  • टेक्स्ट डंप बनाकर एक स्थिर कॉपी source देने से यह समस्या हल की जा सकती है
  • बड़े डेटाबेस के साथ काम करते समय यह तरीका समय बचाता है और डाउनलोड को अधिक तेज़ और विश्वसनीय बनाता है

1 टिप्पणियां

 
GN⁺ 2025-05-02
Hacker News राय
  • SQLite आधिकारिक टूल प्रदान करता है। यह page level पर काम करता है, और replica हर page का encrypted hash source side को भेजता है, फिर source उन pages की पूरी सामग्री दोबारा भेजता है जिनके hash मेल नहीं खाते
  • चल रहे database file को copy करने से corruption हो सकता है। सुरक्षित replication के लिए Litestream का उपयोग किया जा सकता है
  • database को computers के बीच copy करने के तरीकों में पूरा blob भेजना और बाकी हिस्सों को अनदेखा करना शामिल है
    • incremental rsync ज़्यादा तेज़ है, लेकिन इस दावे से सहमत नहीं कि SQL statements भेजना database भेजने से तेज़ है। SQL statements चलाने पड़ते हैं और optimization तथा vacuum operations भी करने पड़ते हैं
    • ऐसे scenario होते हैं जहाँ CSV files से database को "incrementally rebuild" करना पड़ता है। database को शुरू से फिर बनाना अधिक optimal है, लेकिन in-memory empty database में भी batch inserts चलाने में ही 30 मिनट लगते हैं
  • हाल ही में जारी sqlite_rsync utility SQLite database की internal structure के लिए optimized rsync algorithm का एक version इस्तेमाल करती है। यह internal data pages की कुशलता से तुलना करती है और केवल बदले हुए या missing pages को sync करती है
  • text file के रूप में सहेजना inefficient है। sqlite database को सहेजने के लिए VACUUM INTO का उपयोग किया जाता है
    • VACUUM command backup API का एक alternative है, और परिणामस्वरूप backup database का size न्यूनतम होता है, जिससे file system I/O कम होता है
  • यह आश्चर्यजनक है कि rsync की compression सुविधा का उपयोग नहीं किया गया। gzip से compress करके transfer करना अधिक तेज़ हो सकता है
  • DuckDB में Parquet में export करके data size कम किया जा सकता है। transfer और load दोनों तेज़ हो जाते हैं
  • SQLite session extension प्रदान करता है, जो tables में हुए बदलावों को track करता है और change sets/patch sets बनाता है जिनसे SQLite database के पुराने version पर patch लगाया जा सकता है
  • gzip के --rsyncable option का उपयोग करके optimization किया जा सकता है। इससे compression थोड़ा कम हो जाता है, लेकिन differences localized रहते हैं और पूरे compressed output को प्रभावित नहीं करते
    • dump output की compression छोड़कर rsync को पुराने uncompressed dump और मौजूदा dump के बीच differences निकालने दिए जा सकते हैं, फिर rsync network पर भेजे जाने वाले change set को compress कर सकता है
  • 2008 में Postgres का उपयोग करके कई machines पर backups भेजने का अनुभव था। network saturate हो गया, इसलिए udpcast का उपयोग करके backup एक बार में सभी destinations को भेजा गया