कोर डेटापरफ़ॉर्मेंस

Caching

अपना सबसे ज़्यादा इस्तेमाल होने वाला डेटा मेमोरी में रखें और ऐसे इंजन पर, जो हर कोर को काम में लगाता है, reads का जवाब एक मिलीसेकंड से काफ़ी कम समय में पाएँ।

GET/s pipelined, मापा गया
36.6M
TTL की सटीकता
ns
मौजूदा क्लाइंट काम करते हैं
RESP2/3
कदम 1 में से 5
Cache के ज़रिए पढ़ें

Hit होने पर जवाब सीधे मेमोरी से आता है। डेटाबेस को छुआ नहीं जाता।

उदाहरण सेशनplaying
# Cache के ज़रिए पढ़ें
hotkv> GET product:1001
"{\"name\":\"Desk lamp\",\"price\":39}"

असली HotKV कमांड और उदाहरण रिस्पॉन्स के साथ एक एनिमेटेड वॉकथ्रू। किसी भी कदम पर क्लिक करके वहां पहुंचें। कमांड और रिस्पॉन्स अंग्रेज़ी में ही रहते हैं, ठीक वैसे जैसे आप HotKV में टाइप करते और देखते हैं।

समस्या

जिस डेटा को हर सेकंड हज़ारों बार पढ़ा जाता है, उसके लिए डेटाबेस तक पहुँचना धीमा और महँगा होता है। हर page view, API कॉल या dashboard refresh वही query दोहराता है, और आपकी application से बहुत पहले डेटाबेस bottleneck बन जाता है।

HotKV इसे कैसे संभालता है

HotKV डेटाबेस के आगे बैठता है और नतीजों को मेमोरी में रखता है। आपकी application पहले HotKV से पढ़ती है और miss होने पर ही डेटाबेस तक जाती है। HotKV कमांड कई threads पर एक साथ चलाता है, इसलिए व्यस्त cache हर क्लाइंट को एक ही कोर से नहीं गुज़ारता। और जब पीछे का डेटा बदलता है, तो tags से आप entries के पूरे समूह को invalidate कर सकते हैं।

कदम दर कदम

क्या होता है, कमांड दर कमांड

  1. 01

    Cache के ज़रिए पढ़ें

    Hit होने पर जवाब सीधे मेमोरी से आता है। डेटाबेस को छुआ नहीं जाता।

    GET product:1001
  2. 02

    Miss हुआ, इसलिए एक बार लोड करें और cache करें

    Miss पर application डेटाबेस से एक बार पढ़ती है और नतीजे को पाँच मिनट के लिए cache कर देती है।

    SET product:2002 "{\"name\":\"Oak desk\",\"price\":420}" EX 300
  3. 03

    Entries को उनकी निर्भरता के हिसाब से tag करें

    लाइटिंग प्रोडक्ट दिखाने वाले हर cached पेज पर एक ही tag लगा होता है।

    TAG.SET product:1001 catalog:lighting
  4. 04

    समूह को invalidate करें

    कीमतें बदल गईं। इस tag वाली हर key की सूची लें और उन सबको एक pipeline में delete कर दें।

    TAG.MEMBERS catalog:lighting
  5. 05

    बहुत कम समय की entries

    एक flash token, जो पहले से सेट है और नैनोसेकंड की सटीकता के साथ 250 ms बाद गायब हो जाना चाहिए।

    NEXPIRE flash:token:9 250000000
कहां फ़िट बैठता है

असली परिदृश्य

ऑनलाइन दुकानें

प्रोडक्ट पेज, कीमतें और स्टॉक का स्तर हर सेकंड हज़ारों बार पढ़े जाते हैं, और catalog बदलने पर tag के हिसाब से refresh होते हैं।

API और मोबाइल backend

लोकप्रिय endpoints के जवाब छोटे TTL के साथ cache होते हैं, इसलिए ट्रैफ़िक का उछाल डेटाबेस की जगह मेमोरी से टकराता है।

Content साइटें

Render किए गए fragments और लेख का metadata कुछ मिनटों के लिए cache होता है, और editor के publish करते ही tag से invalidate हो जाता है।

अंतर्निहित

आपको क्या मिलता है

सेकंड से नैनोसेकंड तक के TTL

EXPIRE और PEXPIRE वैसे ही काम करते हैं जैसा आप उम्मीद करते हैं। NEXPIRE नैनोसेकंड की सटीकता जोड़ता है।

EXPIREPEXPIRENEXPIRE

Tag से invalidate करें

TAG.SET से keys पर लेबल लगाएँ, फिर किसी लेबल वाली हर key खोजें।

TAG.SETTAG.MEMBERS

वैकल्पिक compression

बड़े payloads को compress किया जा सकता है, ताकि आपका ज़्यादा working set मेमोरी में समा सके।

Multi-threaded reads

कमांड parallel threads पर चलते हैं, इसलिए throughput कोर के साथ बढ़ता है। आँकड़े Performance पेज पर हैं।

GETMGET
संदर्भ:SETNEXPIRETAG.SETTAG.MEMBERS

आम सवाल

क्या मैं अपना मौजूदा Redis क्लाइंट इस्तेमाल कर सकता हूँ?

HotKV Redis protocol (RESP2 और RESP3) बोलता है, इसलिए सामान्य Redis क्लाइंट इससे कनेक्ट हो जाते हैं। जिन कमांड पर आप निर्भर हैं, उन्हें कमांड संदर्भ में देख लें।

Cached keys के समूह को invalidate कैसे करूँ?

Cache करते समय keys को TAG.SET से tag करें, फिर TAG.MEMBERS कॉल करें और जो लौटे उसे delete कर दें।

36.6M का आँकड़ा कहाँ से आता है?

यह HotKV के प्रकाशित benchmark का pipelined GET throughput है। तरीका और hardware Performance पेज पर हैं।

संबंधित उपयोग के मामले

इसे अपने वर्कलोड पर आज़माएं

HotKV Redis प्रोटोकॉल बोलता है, इसलिए आप किसी मौजूदा क्लाइंट को इसकी ओर इंगित करके यही कमांड चला सकते हैं।