2010-02-16 8 views
7

एक प्रमुख मूल्य स्टोर में किसी इंडेक्स के साथ डेटाबेस तालिका अनुकरण करने का सबसे आसान तरीका क्या है? मुख्य मूल्य स्टोर में कोई प्रश्न नहीं है और कोई आदेशित कुंजी नहीं है।एक प्रमुख मूल्य स्टोर में किसी इंडेक्स के साथ डेटाबेस तालिका अनुकरण करने का सबसे आसान तरीका क्या है?

चीजें मैं अनुकरण करने के लिए चाहते हैं (प्राथमिकता के क्रम में):

  1. टेबल बनाएं
  2. कॉलम
  3. जोड़े अनुक्रमित
  4. क्वेरी बनाएं मनमाना के आधार पर प्राथमिक कुंजी
  5. क्वेरी के आधार पर कॉलम
+3

किस पहलू को अनुकरण करें? एसक्यूएल संगतता? प्रदर्शन गुण? एक पूर्णांक प्राथमिक कुंजी के आधार पर सही वस्तुओं को प्राप्त करना? –

+0

किसी भी पहलू जिसे एक प्रभावी तरीके से कार्यान्वित किया जा सकता है। – Zubair

+0

आपका प्रश्न बहुत स्पष्ट नहीं है और आपकी "स्पष्टीकरण" ने कुछ भी स्पष्ट नहीं किया है। @ एमबी की टिप्पणियों का उत्तर देने से आप बेहतर प्रतिक्रिया देंगे। –

उत्तर

4

यदि आप Redis (स्ट्रिंग, सूचियों, सेट इत्यादि का समर्थन करने वाला एक उन्नत कुंजी-मूल्य स्टोर) का उपयोग करते हैं तो यह काफी आसान है। मैंने पहले से ही C# redis client विकसित किया है जिसमें पीओसीओ के डेटा मॉडल को संग्रहीत करने के लिए मूल समर्थन है। आरडीबीएमएस में स्टोर करने के लिए ये सटीक उसी पीओसीओ का उपयोग OrmLite द्वारा किया जा सकता है।

रास्ता Redis तेज है, मैं एक benchmark कि भंडार है और 1.2 के तहत सेकंड (एक 3yo आईमैक पर एक unittest अंदर चल रहा है) में पूरे करेंनॉर्थविंडडेटाबेस (3202 रिकॉर्ड) प्राप्त करता है।

मैं दो तरीकों

  • अलग संस्थाओं, जहाँ मैं कक्षा प्रकार का नाम और प्राथमिक कुंजी गठबंधन एक अद्वितीय कुंजी जैसे बनाने के लिए संस्थाओं की दुकान urn:user:1
    • मैं तो मेरे सभी संस्थाओं का ट्रैक रखने के प्राथमिक कुंजी का एक अलग सेट (एक Redis सेट में) को बनाए रखने, की तरह एक कुंजी का उपयोग: ids:user
  • एक Redis सर्वर साइड सूची में - जो कार्य करता है पेजिंग के लिए समर्थन के साथ एक टेबल की तरह, lists:user
+0

मैंने अतीत में रेडिस का उपयोग किया था, और हाँ, यह अंधेरे से तेज़ है, मुझे यह पसंद आया, विशेष रूप से सभी रेंज, सेट और परमाणु (incr और decr) संचालन। यह सिर्फ इतना है कि अब मैं एक प्रणाली से निपट रहा हूं जो गतिशील रूप से विस्तार योग्य डेटाबेस (Riak) में कई अरब रिकॉर्ड स्टोर करता है, इसलिए रेडिस इसके लिए बिल्कुल सही नहीं है, क्योंकि सब कुछ स्मृति में फिट होना है – Zubair

+0

असल में रेडिस ट्रंक में एक वीएम शामिल होगा जो आपको केवल 1.6 जीबी मेमोरी का उपयोग करके 10 मिलियन कुंजियों (किसी भी आकार के मूल्य के साथ) स्टोर करने की अनुमति देता है, जबकि अभी भी तेज गति से शेष रहता है - देखें: http://antirez.com/post/redis-virtual-memory-story.html – mythz

+0

हाँ, मैं देखा है, बहुत अच्छा !! वास्तव में, यहां तक ​​कि Riak भी एक रेडिस आधारित बैकएंड है। हालांकि यह अभी भी अरबों रिकॉर्ड तक स्केल नहीं करता है, लेकिन बहुत अच्छा है। – Zubair

2

हैशटेबल या शब्दकोश का उपयोग करें। यदि आप अद्वितीय कुंजी मान चाहते हैं तो आप एक GUID या हैशकोड का उपयोग कर सकते हैं।

+0

में कोई मान स्टोर करें क्या आपका मतलब प्राथमिक कुंजी के लिए एक तेज़ है? और एक शब्दकोश कहाँ फिट बैठता है? – Zubair

+0

वास्तव में, मुझे लगता है कि एक हैशटेबल शायद आपको बेहतर लगेगा। शब्दकोश सिर्फ एक और संभावित विकल्प है। –

1

कुंजी-मूल्य स्टोर को कुंजी को ऑर्डर करने और चाबियों तक पहुंच प्रदान करने का समर्थन करना चाहिए।

तो फिर तुम बनाने चाहिए दो शब्दकोशों:

id -> payload 

और

col1, id -> NULL 

, जहां payload सभी डेटा डेटाबेस तालिका होंगे, और वह दूसरे शब्दकोश की चाबी को शामिल करना चाहिए शामिल करना चाहिए पहले शब्दकोश की प्रत्येक प्रविष्टि से (col1, id) के मान।

+0

मैं जिस मुख्य मूल्य स्टोर का उपयोग कर रहा हूं वह कुंजी या श्रेणी तक पहुंच के क्रम का समर्थन नहीं करता है। – Zubair

+0

इसके अलावा, क्या आप उत्तर को दोबारा जवाब दे सकते हैं, मुझे शब्दकोशों के बारे में हिस्सा नहीं समझा। Col1 क्या है? – Zubair

संबंधित मुद्दे

 संबंधित मुद्दे