कोर डेटाई-कॉमर्स

फ्लैश सेल और इन्वेंटरी

जब दस हज़ार खरीदार एक ही सेकंड में Buy दबाएँ, तब ठीक उतना ही स्टॉक बेचें जितना आपके पास है, और bots को बाहर रखें।

स्टॉक घटाना
Atomic
ज़्यादा बिकी यूनिट
0
अपने आप छूटने वाले होल्ड
10 min
कदम 1 में से 6
स्टॉक लोड करें

500 यूनिट बिक्री पर जाती हैं।

उदाहरण सेशनplaying
# स्टॉक लोड करें
hotkv> SET stock:sneaker-x 500
OK

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

समस्या

फ्लैश सेल में इन्वेंटरी डेटाबेस ठीक तब bottleneck बन जाता है जब उसकी सबसे ज़्यादा ज़रूरत होती है। पहले पढ़कर फिर लिखने वाली जाँचें concurrency में ज़रूरत से ज़्यादा बेच देती हैं, छोड़े गए कार्ट स्टॉक को हमेशा के लिए रोक लेते हैं, और असली ग्राहकों का पेज लोड होने से पहले ही bots स्टॉक खरीद लेते हैं।

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

स्टॉक एक काउंटर में रहता है जिसे atomically घटाया जाता है, इसलिए एक साथ आए खरीदार कभी मौजूद स्टॉक से ज़्यादा नहीं ले सकते। हर रिज़र्वेशन दस मिनट की expiry वाली एक key है, हर ग्राहक पर रेट लिमिट bots को धीमा करती है, और कन्फ़र्म हुए ऑर्डर एक स्ट्रीम में जाते हैं ताकि fulfilment अपनी गति से उन्हें प्रोसेस करे।

कदम दर कदम

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

  1. 01

    स्टॉक लोड करें

    500 यूनिट बिक्री पर जाती हैं।

    SET stock:sneaker-x 500
  2. 02

    Bots को काबू में रखें

    हर ग्राहक 10 सेकंड में दो बार कोशिश कर सकता है। Bots तुरंत यह सीमा पार कर देते हैं।

    GCRA.LIMIT buy:customer:881 10000 2
  3. 03

    एक यूनिट लें

    DECR atomic है। 10,000 एक साथ आए क्लिक भी 500 से ज़्यादा यूनिट नहीं ले सकते।

    DECR stock:sneaker-x
  4. 04

    इसे दस मिनट रोककर रखें

    चेकआउट छोड़ दिया जाए तो रिज़र्वेशन अपने आप expire हो जाता है, और एक sweeper यूनिट को वापस रख देता है।

    SET hold:sneaker-x:order-7781 customer:42 NX EX 600
  5. 05

    Sold out संभाला जाता है

    जब DECR शून्य से नीचे जाता है, तो यूनिट लौटा दी जाती है और खरीदार को sold out दिखता है। स्टॉक देर तक negative नहीं रहता।

    INCR stock:sneaker-x
  6. 06

    ऑर्डर fulfilment को सौंपें

    भुगतान हो चुके ऑर्डर एक स्ट्रीम में जोड़े जाते हैं। वेयरहाउस सिस्टम उन्हें अपनी गति से निपटाता है।

    XADD orders * order 7781 sku sneaker-x customer 42
कहां फ़िट बैठता है

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

स्नीकर और मर्चेंडाइज़ ड्रॉप

लिमिटेड एडिशन सेकंडों में बिक जाते हैं, और एक भी जोड़ी ज़्यादा नहीं बिकती।

टिकटिंग

चेकआउट के दौरान सीटें कुछ मिनटों के लिए होल्ड रहती हैं, और खरीदार चला जाए तो अपने आप छूट जाती हैं।

फ़ूड और ग्रॉसरी डिलीवरी

डिलीवरी स्लॉट काउंटर होते हैं, जिन्हें ग्राहकों के बुक करते ही atomically घटाया जाता है।

अंतर्निहित

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

Atomic काउंटर

DECR और INCR बिना किसी race के एक ही कदम में स्टॉक बदलते हैं।

DECRINCRBY

Expire होने वाले होल्ड

रिज़र्वेशन TTL वाली keys होते हैं।

SETNXEX

Bot सुरक्षा

हर ग्राहक की लिमिट, और दोबारा कोशिश का सटीक समय।

GCRA.LIMIT

ऑर्डर हैंड-ऑफ़

Fulfilment के लिए एक स्ट्रीम, consumer groups और acknowledgements के साथ।

XADDXREADGROUP
संदर्भ:DECRSETGCRA.LIMITXADD

आम सवाल

Expire हुए होल्ड स्टॉक कैसे लौटाते हैं?

Expire हुए होल्ड keyspace notifications या समय-समय पर होने वाले sweep से पकड़े जा सकते हैं, जो स्टॉक काउंटर को फिर से बढ़ा देता है।

क्या मैं स्टॉक लिए बिना उसे देख सकता हूँ?

हाँ। GET मौजूदा गिनती लौटाता है। सिर्फ़ DECR रिज़र्व करता है।

कई आइटम वाले कार्ट का क्या?

कई काउंटरों को एक साथ घटाने के लिए MULTI और EXEC, या एक function इस्तेमाल करें।

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

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

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