मेमकेड में बनाम सेट जोड़ें


17

मुझे ADD और SET के बीच कोई अंतर समझ में नहीं आता है? ऐसा लगता है जैसे ADD में SET शामिल है या ADD गलत है यदि कुछ है और SET सिर्फ ओवरराइट करता है। धन्यवाद!

संपादित करें: मेरा विशिष्ट प्रश्न यह है कि, "आप ऐड के बजाय सेट या सेट के बजाय ऐड का उपयोग कब करते हैं?"

जवाबों:


22

आपको अपने पहले प्रश्न का उत्तर बहुत पहले से ही मिल गया है: का इरादा ADDकेवल तब काम करना है जब कोई कुंजी पहले से मौजूद नहीं है, जबकि SETमूल्य को अपडेट करने के लिए है, चाहे वह पहले से मौजूद हो। यदि आप SQL से परिचित हैं, तो यह INSERTप्रश्नों ( ADD) और UPDATE( SET) के बीच अंतर की तरह है ।

आपके परिशिष्ट के प्रश्न के संबंध में, आप अपने उद्देश्य के अनुसार जो भी उपयोग करेंगे। मैं कहूंगा कि SETयह अधिक सामान्य ऑपरेशन होगा, क्योंकि यह अधिक सामान्य है कि आप केवल यह कहना चाहते हैं "मुझे fooमूल्य की कुंजी चाहिए bar, और मुझे परवाह नहीं है कि यह पहले से ही था या नहीं"। हालांकि, ऐसे (कम लगातार) अवसर होंगे जब यह जानना आवश्यक होगा कि एक कुंजी कैश में पहले से ही नहीं है।

एक उदाहरण जो मन में आता है जब ADDउचित होगा मेम्चेचे में सत्रों का भंडारण किया जाता है (जो, वैसे, मैं अनुशंसा नहीं करता हूं) - यदि आप अपने सत्र आईडी को यादृच्छिक रूप से (या हैशिंग के माध्यम से) उत्पन्न कर रहे हैं, तो आप नहीं चाहेंगे एक मौजूदा कुंजी के साथ एक नया सत्र बनाने के लिए, क्योंकि यह एक उपयोगकर्ता को दूसरे उपयोगकर्ता के डेटा तक पहुंच प्रदान करेगा। इस स्थिति में, जब आप सत्र का उपयोग करेंगे ADD, और यदि यह विफलता की स्थिति लौटाता है, तो आपको एक नया सत्र आईडी बनाने और फिर से प्रयास करने की आवश्यकता होगी। सत्र को अद्यतन करना, निश्चित रूप से, तब उपयोग होगा जब SETउपयोगकर्ता ने आपके आवेदन के माध्यम से अपना काम किया।


1
मैं यहां थोड़ा सा नाइटपैकिंग हो सकता हूं, लेकिन एसक्यूएल के साथ आपकी तुलना में, अगर "INSERT की तुलना" जोड़ें, तो "सेट" UPDATE के बजाय REPLACE से तुलना करेगा।
Matteo

2
इसलिए "मोटे तौर पर" शब्द का उपयोग। यदि आप वास्तव में नाइटपिक प्राप्त करना चाहते हैं , REPLACEतो एसक्यूएल भी नहीं है ... यह "SQL द्वारा प्रेरित भाषा है जो MySQL समझता है" (मुस्कराहट)
Womble

3

उपर्युक्त उत्तर के अलावा यूजर-आईडी 'वूमबल', कृपया निम्नलिखित बातों पर भी विचार करें:

  1. । सेट ’के साथ दौड़ हालत की संभावना ऐड’ के विपरीत है। निक जॉनसन द्वारा दिए गए उत्तर की लिंक नीचे देखें: /programming/13234556/using-memcache-add-instead-of-set

  2. यदि आप जानते हैं कि 'ऐड' करेगा, तो 'सेट' का उपयोग न करें। यह नेटवर्क पर डेटा भेजने से बचने के लिए है क्योंकि ये आरपीसी कॉल हैं । और व्यावहारिक रूप से लगभग सभी समय नेटवर्क ट्रैफ़िक द्वारा उपभोग किया जाता है क्योंकि मेम्चे में कुंजी-मूल्य जोड़ी की तलाश में। इसलिए यदि आप उस नेटवर्क ट्रैफ़िक से बच सकते हैं जो उस स्थिति में सबसे अच्छा है तो आपकी प्रतिक्रिया का समय तेज़ होगा।


Appstats देखें ( https://developers.google.com/appengine/docs/python/tools/appstats ) (Google द्वारा) देखें और बिंदु # 2 को अधिक समझने के लिए, कृपया http://www.youtube.com/watch पर देखें Guido Van Rossum (@Google) द्वारा v = bvp7CuBWVA

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.