- यह अप्रैल, 2021 में प्रकाशित ब्लॉग पोस्ट की निरंतरता है।
हमने एक नमूना एप्लिकेशन बनाया जो एक सामान्य वेब उपयोग के मामले और सर्वर रहित कार्यों का उपयोग करके अग्रणी सर्वर रहित डेटाबेस के प्रदर्शन की तुलना करता है। डेटाबेस डायनेमोडीबी, मोंगोडीबी (एटलस), फायरस्टोर, कैसेंड्रा (डेटास्टैक्स एस्ट्रा), फॉनाडीबी और रेडिस (अपस्टैश) हैं
एप्लिकेशन और स्रोत कोड की जांच करें।
हमने जो तुलना की वह प्रत्येक डेटाबेस के लिए शीर्ष 10 समाचार लेख लाने की विलंबता है। संपूर्ण डेटा न्यूयॉर्क टाइम्स एपीआई से एकत्र किए गए 7001 वास्तविक समाचार लेख हैं। जिस क्वेरी को हम मापते हैं वह किसकी प्रतीक्षा अवधि है:
select * from news where section = “World” order by view_count desc limit 10
बैकएंड एडब्ल्यूएस लैम्ब्डा (फायरस्टोर के लिए Google क्लाउड फ़ंक्शन) पर सर्वर रहित फ़ंक्शन के रूप में कार्यान्वित किया जाता है। हमने विलंबता को कम करने के लिए सर्वर रहित फ़ंक्शन और डेटाबेस को उसी क्षेत्र (जब संभव हो) में व्यवस्थित किया।
हमने डेटाबेस कनेक्शन समय को विलंबता माप से बाहर रखा है, और क्वेरी के ठीक पहले और बाद में टाइमस्टैम्प रिकॉर्ड किया है। विलंबता को बैकएंड (सर्वर रहित फ़ंक्शन के अंदर) पर मापा और रिकॉर्ड किया जाता है, इसलिए इसमें ब्राउज़र और सर्वर के बीच नेटवर्क विलंबता शामिल नहीं होती है। साथ ही सर्वर रहित फ़ंक्शन के ठंडे प्रारंभ समय से भी विलंबता प्रभावित नहीं होती है।
गतिशील वास्तविक विश्व डेटा का अनुकरण करने के लिए, हमने शीर्ष 10 लेखों में यादृच्छिक view_count मान निर्दिष्ट किए हैं। इसलिए हर बार हम डेटाबेस को लेखों के एक अलग सेट को वापस करने के लिए मजबूर करते हैं, ताकि उन्हें उनके कैश का उपयोग करने से रोका जा सके। अद्यतन संचालन विलंबता की गणना में शामिल नहीं हैं।
यहां आज (अगस्त, 25) की विलंबता संख्या
नीचे, मैं उन कस्टम कॉन्फ़िगरेशन की सूची दूंगा जो प्रत्येक डेटाबेस के लिए लागू होते हैं:
डायनेमोडीबी
क्षेत्र:यूएस-वेस्ट-1
पढ़ने और लिखने की क्षमता:50 (डिफ़ॉल्ट मान 5 था)।
अनुक्रमणिका:विभाजन कुंजी अनुभाग (स्ट्रिंग) के साथ GSI और कुंजी view_count (संख्या) सॉर्ट करें
नोट:ग्लोबल टेबल सक्षम नहीं है क्योंकि क्लाइंट पहले से ही उसी क्षेत्र में है (यूएस-वेस्ट -1)
कोड की जांच करें।
MongoDB (एटलस)
क्षेत्र:एडब्ल्यूएस एन वर्जीनिया (यूएस-ईस्ट-1)
क्लस्टर टियर:M5 (सामान्य)
इंडेक्स:सेक्शन और व्यू_काउंट पर कंपाउंड इंडेक्स
नोट:काश मैं MongoDB सर्वर रहित पेशकश की कोशिश कर पाता लेकिन इसमें Node.js ड्राइवर नहीं होता। लेकिन यह कोई समस्या नहीं होनी चाहिए क्योंकि मैं डीबी कनेक्शन को उस हिस्से से बाहर रखता हूं जहां मैं विलंबता की गणना करता हूं।
कोड की जांच करें।
फायरस्टोर
क्षेत्र:जीसीपी यूएस-सेंट्रल
मोड:डेटास्टोर
अनुक्रमणिका:अनुभाग पर समग्र अनुक्रमणिका(आरोही) और view_count(अवरोही)
कोड की जांच करें।
कैसंड्रा (डेटास्टैक्स एस्ट्रा)
क्षेत्र:एडब्ल्यूएस यूएस-ईस्ट-1
योजना:जाते ही भुगतान करें
अनुक्रमणिका:प्राथमिक कुंजी (अनुभाग, view_count, id)
एपीआई:बाकी एपीआई
कोड की जांच करें।
FaunaDB
योजना:व्यक्तिगत ($25 प्रति माह)
इंडेक्स:टर्म =सेक्शन, वैल्यू =व्यू_काउंट
एपीआई:एफक्यूएल
कोड की जांच करें।
रेडिस (अपस्टैश)
क्षेत्र:एडब्ल्यूएस यूएस-वेस्ट-1
योजना:जाते ही भुगतान करें।
इंडेक्स:सॉर्टेडसेट का उपयोग किया जाता है।
नोट:सिंगल और मल्टी ज़ोन डेटाबेस का अलग-अलग परीक्षण किया जाता है।
कोड की जांच करें।
विशेष नोट
- FaunaDB में डिफ़ॉल्ट रूप से बेहतर संगतता गारंटी और वैश्विक प्रतिकृति है। साथ ही यह आपको यह चुनने की अनुमति नहीं देता है कि किस क्षेत्र को तैनात करना है। इसके अपेक्षाकृत कम प्रदर्शन के पीछे ये कारण हो सकते हैं।
- Firestore का प्रदर्शन दूसरों के साथ समान है लेकिन एक बड़े विचरण के साथ। ऐसा इसलिए हो सकता है क्योंकि ठंडे कनेक्शन का ओवरहेड है। मुझे नहीं पता था कि कनेक्शन को कैसे जीवित रखा जाए। अगर आपके पास इस पर कोई विचार है तो मुझे बताएं।
- कैसेंड्रा प्राथमिक कुंजी क्षेत्रों को अद्यतन करने की अनुमति नहीं देता है। यदि आप इंडेक्स को ज्यादा अपडेट करेंगे तो सेकेंडरी इंडेक्स की सिफारिश नहीं की जाती है। इसलिए मैं view_count को अपडेट नहीं कर सका जो इसके प्रदर्शन को सकारात्मक रूप से प्रभावित कर सकता है।
- हालांकि अपस्टैश सिंगल ज़ोन थोड़ा तेज़ दिखता है, अपस्टैश के लिए सिंगल और मल्टी ज़ोन सेटअप के बीच कोई बड़ा प्रदर्शन अंतर नहीं है। ऐसा लगता है कि REST API का प्रदर्शन उच्च पर्सेंटाइल में मूल API के बहुत करीब है।
ध्यान दें कि यह एक सतत प्रयास है, इसलिए हम बेंचमार्क की गुणवत्ता में सुधार के लिए कोड को रिफैक्टर करना जारी रखेंगे। जब हम किसी उत्पाद के कोड को फिर से सक्रिय करते हैं तो हम उसका हिस्टोग्राम रीसेट कर देंगे। कृपया कोड जांचें और हमें बताएं कि क्या सुधार करने के लिए चीजें हैं। आप ट्विटर और कलह पर हमसे संपर्क कर सकते हैं।