उपयोग की गई लाइब्रेरीज़

  • craw: CGO-आधारित समाधान। database/sql ड्राइवर नहीं है
  • mattn: CGO-आधारित समाधान। अब भी de-facto standard है और व्यापक रूप से उपयोग होता है
  • modernc: शुद्ध Go समाधान। नई लाइब्रेरी, जो SQLite C कोड को Go में फिर से लिखे गए कोडबेस पर आधारित है
  • ncruces: WASM-आधारित शुद्ध Go समाधान
  • sqinn: CGO का उपयोग न करने वाला समाधान। SQLite DB फ़ाइल तक पहुँचने के लिए github.com/cvilsmeier/sqinn का उपयोग करता है
  • zombie: crawshaw ड्राइवर को modernc लाइब्रेरी का उपयोग करके फिर से लिखा गया है। database/sql ड्राइवर नहीं है

बेंचमार्क

  • user/article/comment से बनी टेस्ट DB तैयार की गई
  • 10 लाख उपयोगकर्ता बनाना और उन्हें क्वेरी करना
    • insert : sqinn 883ms > craw 1234ms > mattn 1537ms > zombie 1862ms > modernc 5557ms > ncruces 10073ms
    • query : zombie 325ms > craw 608ms > sqinn 641ms > mattn 1267ms > modernc 1379ms > ncruces 6080ms
  • जटिल क्वेरी: एक ट्रांज़ैक्शन में 200 उपयोगकर्ता बनाए जाते हैं, दूसरे ट्रांज़ैक्शन में प्रत्येक उपयोगकर्ता के लिए 100 articles बनाए जाते हैं, और एक अन्य ट्रांज़ैक्शन में प्रत्येक article पर 20 comments बनाए जाते हैं। फिर सब कुछ JOIN करके क्वेरी किया जाता है
    • insert : sqinn 574 > craw 729ms > mattn 911ms > zombie 1400ms > modernc 3211ms > ncruces 5159ms
    • query : zombie 507ms > craw 667ms > sqinn 709ms > mattn 1387ms > modernc 1633ms > ncruces 5380ms
      Here are the remaining sections of the "go-sqlite-bench" GitHub repository summary in the requested format:
  • अधिक रीड्स(Many) : N उपयोगकर्ताओं को एक ही database transaction में insert करने के बाद, 1000 बार query
    • query/N=10 : zombie 17ms > craw 14ms > sqinn 25ms > mattn 30ms > modernc 35ms > ncruces 185ms
    • query/N=100 : zombie 36ms > craw 65ms > sqinn 83ms > mattn 130ms > modernc 135ms > ncruces 829ms
    • query/N=1000 : zombie 225ms > craw 520ms > sqinn 619ms > mattn 1143ms > modernc 1180ms > ncruces 7230ms
  • बड़े डेटा(Large) : 10,000 उपयोगकर्ताओं और N bytes की row content insert करने के बाद, सभी उपयोगकर्ताओं को query करना
    • query/N=50000 : mattn 168ms > craw 197ms > ncruces 244ms > modernc 276ms > zombie 552ms > sqinn 519ms
    • query/N=100000 : mattn 290ms > craw 346ms > ncruces 391ms > modernc 514ms > zombie 1071ms > sqinn 1085ms
    • query/N=200000 : mattn 591ms > craw 624ms > ncruces 789ms > modernc 888ms > zombie 2198ms > sqinn 2264ms
  • समवर्ती(Concurrent) : 10 लाख उपयोगकर्ता insert करने के बाद, N goroutines के साथ सभी उपयोगकर्ताओं को query करना
    • query/N=2 : zombie 367ms > craw 692ms > sqinn 854ms > mattn 1516ms > modernc 2889ms > ncruces 8268ms
    • query/N=4 : zombie 646ms > craw 1100ms > sqinn 1411ms > mattn 1840ms > modernc 7144ms > ncruces 12710ms
    • query/N=8 : zombie 1140ms > craw 1873ms > sqinn 2460ms > mattn 3483ms > modernc 18674ms > ncruces 25792ms

सारांश

  • किसी एक को स्पष्ट विजेता नहीं कहा जा सकता; सब कुछ use case पर निर्भर करता है
  • Crawshaw और Zombiezen काफ़ी तेज़ हैं
  • Mattn de-facto standard तो है, लेकिन कुल मिलाकर सबसे अच्छा समाधान नहीं है
  • CGO के बिना भी SQLite संभव है

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.