2010-06-16 14 views
7

मैं एक नोएसक्यूएल डेटाबेस (< 5 एमबी) में चित्रों को स्टोर करने के लिए देख रहा हूं और उन्हें एक अलग बाल्टी में लेखों से लिंक करता हूं। Riak की लिंक चलने की सुविधा किस प्रकार की गति प्रदान करती है? क्या यह आरडीबीएमएस में शामिल है?Riak लिंक-पैदल चलने की तरह चल रहा है?

उत्तर

11

लिंक जॉइन (जिसमें कार्टेशियन उत्पाद शामिल है) के समान नहीं हैं, लेकिन इन्हें कुछ इंद्रियों में समान उद्देश्यों के लिए उपयोग किया जा सकता है। वे एक HTML दस्तावेज़ में लिंक के समान हैं।

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

इसके अलावा, मानचित्र-कमी स्वयं ही धीमी नहीं है, आपके पास सिर्फ आपके लिए कड़ी मेहनत करने के लिए एक परिष्कृत क्वेरी प्लानर नहीं है; आपको इस बारे में सोचना होगा कि आप आवश्यकतानुसार अपने डेटा को कैसे क्वेरी और व्यवस्थित करेंगे।

7

एक तरफा रिश्ते और सामान्य रूप से पूछताछ के रूप में तेजी से सोचें। MapReduce के रूप में धीमी नहीं है।

से: http://seancribbs.com/tech/2010/02/06/why-riak-should-power-your-next-rails-app/

पहला तरीका है कि Riak इस के साथ संबंधित लिंक-चलने के साथ है। Riak में संग्रहीत प्रत्येक डेटाम एक तरफा लिंक HTTP शीर्षलेख के माध्यम से अन्य डेटा के संबंध हो सकता है। कैननिकल उदाहरण में, आपको बैंड की कुंजी पता है जिसे आपने "कलाकार" बाल्टी में संग्रहीत किया है (Riak buckets डेटाबेस टेबल या S3 बाल्टी की तरह हैं)। यदि वह कलाकार अपने एल्बम से जुड़ा हुआ है, जो एल्बम पर ट्रैक से जुड़ा हुआ है, तो आप एक ही अनुरोध में उत्पादित सभी ट्रैक पा सकते हैं। जैसा कि मैं अगले खंड में वर्णन करता हूं, यह SQL में जॉइन की तुलना में बहुत कम दर्दनाक है क्योंकि प्रत्येक आइटम को पर एक तालिका के बजाय पर स्वतंत्र रूप से संचालित किया जाता है।

/कच्चे/कलाकारों/द बीटल्स/एल्बम, ,/पटरियों, _, 1 "/ कच्चे" यूआरएल नाम स्थान के शीर्ष है, "कलाकार" GET: यहाँ क्या है कि क्वेरी लगेगा की तरह है बाल्टी है, "द बीटल्स" स्रोत ऑब्जेक्ट कुंजी है। मिलान विनिर्देशों का पालन करने के लिए कौन से लिंक हैं, बाल्टी, टैग, ट्रिपल रखें, जहां अंडरस्कोर कुछ भी मेल खाता है। तीसरा पैरामीटर, "रखें" उस चरण से परिणाम लौटने के लिए कहता है, जिसका अर्थ है कि आप किसी भी संयोजन में किसी भी चरण से परिणाम पुनर्प्राप्त कर सकते हैं। मैं आप के बारे में पता नहीं है, लेकिन मुझे लगता है कि अधिक इस से प्राकृतिक लगता है:

ट्रैक का चयन करें * पटरियों से भीतरी पर tracks.album_id = albums.id एलबम में शामिल हों अंदरूनी एलबम पर कलाकारों में शामिल हों।। artist_id = artists.id कहां कलाकारों। नाम = "बीटल्स" लिंक की चेतावनी यह है कि वे स्वाभाविक रूप से unidirectional हैं, लेकिन यह आपके आवेदन में छोटी कठिनाई से दूर किया जा सकता है। अपने SQL डेटाबेस (जो ActiveRecord अतीत में दर्दनाक बना दिया है) में रेफेरेंन्शिअल सत्यनिष्ठा की कमी के बिना, आप कोई ठोस गारंटी नहीं कि आपके DELETE या अद्यतन, वैसे भी अनाथ बनने के लिए एक पंक्ति का कारण नहीं होगा। हम खराब हैं क्योंकि ActiveRecord को एसोसिएशन के लिंक को स्वचालित रूप से संभालता है।

जगह है जहाँ कड़ी चलने सुविधा वास्तव में चमकता है आत्म निर्देशात्मक और गहरी सकर्मक में है रिश्ते (लगता है has_many: के माध्यम से रिट बड़े)।चूंकि आपके पास नहीं है जो जॉइन और के माध्यम से एक वर्चुअल टेबल बनाते हैं, उसी तालिका के उपनाम अलग-अलग संस्करणों के साथ, आप आसानी से सोशल नेटवर्क ग्राफ़ (दोस्तों के मित्र-मित्र) के रूप में आसानी से काम कर सकते हैं, और पेड़ और सूचियों जैसे डेटा संरचनाएं।

+0

हेडर में संग्रहीत, क्या इसका मतलब यह है कि दस्तावेज़ में संग्रहीत लिंक लिंक किए गए दस्तावेज़ के स्थान पर एक http लिंक है? – tesserakt

+0

Riak HTTP के माध्यम से पहुंचा जा सकता है, तकनीकी रूप से, हाँ - दस्तावेज़ http लिंक के अंतर्गत संग्रहीत किया जाता है। लेकिन आपको अपने दस्तावेज़ पर जाने के लिए लिंक श्रृंखला नहीं चलनी है, आप इसे सीधे एक्सेस कर सकते हैं। – databyte

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