एक क्षेत्र में एक डेटा संरचना एम्बेड साधारण मामलों के लिए काम कर सकते हैं, लेकिन यह आप रिलेशनल डेटाबेस का लाभ लेने से रोकता है। रिलेशनल डेटाबेस आपके डेटा को खोजने, अपडेट करने, हटाने और सुरक्षित करने के लिए डिज़ाइन किए गए हैं। एक एम्बेडेड फ़ील्ड के साथ जिसमें अपना स्वयं का वैड-ओ-डेटा (सरणी, जेएसओएन, एक्सएमएल इत्यादि) होता है, आप इसे स्वयं करने के लिए सभी कोड लिखते हैं।
मामलों में जहां एम्बेडेड क्षेत्र अधिक उपयुक्त हो सकता है कर रहे हैं, लेकिन इस सवाल का एक उदाहरण के रूप में मैं एक मामला है कि एक संबंधित तालिका approch के फायदे पर प्रकाश डाला गया का उपयोग करेगा के लिए।
एक ब्लॉग के लिए एक उपयोगकर्ता और पोस्ट उदाहरण कल्पना कीजिए।
एक एम्बेडेड पद समाधान के लिए, अगर आप इस तरह एक मेज कुछ (psuedocode - इन शायद वैध DDL नहीं हैं) के लिए होता है:
create table Users {
id int auto_increment,
name varchar(200)
post text[][],
}
संबंधित तालिकाओं के साथ
, आप
create table Users {
id int auto_increment,
name varchar(200)
}
create table Posts {
id auto_increment,
user_id int,
content text
}
की तरह कुछ करना होगा
ऑब्जेक्ट रिलेशनल मैपिंग (ओआरएम) टूल्स: एम्बेडेड पोस्ट के साथ, आप उपयोगकर्ता को पोस्ट जोड़ने, मौजूदा पोस्ट के माध्यम से नेविगेट करने, उन्हें सत्यापित करने, उन्हें हटाने आदि के लिए मैन्युअल रूप से कोड लिखेंगे। अलग टेबल डी के साथ साइन इन करें, आप ActiveRecord (या जो ऑब्जेक्ट रिलेशनल सिस्टम आप उपयोग कर रहे हैं) का लाभ उठा सकते हैं, इसके लिए टूल जो आपके कोड को अधिक सरल रखना चाहिए।
लचीलापन: कल्पना कीजिए कि आप पोस्ट में दिनांक फ़ील्ड जोड़ना चाहते हैं। आप इसे एक एम्बेडेड फ़ील्ड के साथ कर सकते हैं, लेकिन आपको अपनी सरणी को पार्स करने, फ़ील्ड को सत्यापित करने, मौजूदा एम्बेडेड पोस्ट आदि को अपडेट करने के लिए कोड लिखना होगा। अलग तालिका के साथ, यह बहुत आसान है। इसके अलावा, मान लें कि आप अपने सिस्टम में एक संपादक जोड़ना चाहते हैं जो सभी पदों को मंजूरी दे। संबंधपरक उदाहरण के साथ यह आसान है। एक उदाहरण के सभी पोस्ट ActiveRecord के साथ 'बॉब' द्वारा संपादित खोजने के लिए के रूप में, तुम सिर्फ आवश्यकता होगी:
Editor.where(name: 'Bob').posts
एम्बेडेड पक्ष के लिए, आप डेटाबेस में प्रत्येक उपयोगकर्ता के माध्यम से चलने के लिए कोड लिखने के लिए होता है हर एक को पार्स उनके पदों के और संपादक क्षेत्र में 'बॉब' की तलाश करें।
प्रदर्शन: कल्पना कीजिए कि आपके पास 10,000 उपयोगकर्ताओं के औसत के साथ 10,000 उपयोगकर्ता हैं। अब आप एक निश्चित तारीख पर किए गए सभी पदों को खोजना चाहते हैं। एम्बेडेड फ़ील्ड के साथ, आपको प्रत्येक रिकॉर्ड के माध्यम से लूप करना होगा, सभी पोस्टों की पूरी सरणी पार्स करना होगा, तिथियां निकालें और अपनी इच्छानुसार जांच करें। यह दोनों cpu और डिस्क i/0 चबाएगा। डेटाबेस के लिए, आप आसानी से दिनांक फ़ील्ड को अनुक्रमित कर सकते हैं और प्रत्येक उपयोगकर्ता से प्रत्येक पोस्ट को पार्स किए बिना आपको आवश्यक सटीक रिकॉर्ड खींच सकते हैं।
मानकों: एक विक्रेता विशिष्ट डेटा संरचना का उपयोग करना मतलब है कि आपके एप्लिकेशन को दूसरे डेटाबेस में ले जाना दर्द हो सकता है। पोस्टग्रेज़ में डेटा प्रकारों का समृद्ध सेट प्रतीत होता है, लेकिन वे MySQL, ओरेकल, एसक्यूएल सर्वर आदि के समान नहीं हैं। यदि आप मानक डेटा प्रकारों के साथ चिपके रहते हैं, तो आपके पास बैकएंड्स को स्वैप करने में बहुत आसान समय होगा।
ये मुख्य मुद्दे हैं जिन्हें मैं शीर्ष पर देखता हूं। मैंने यह गलती की है और इसके लिए कीमत चुकाई है, इसलिए जब तक कोई सुपर-अनिवार्य कारण नहीं होता है, तो मैं अलग-अलग तालिका का उपयोग करूंगा।
http://stackoverflow.com/questions/27257093/rails-use-serialized-attributes-or-a-belongs-to-association –
@LannyBose नहीं, यह एक अलग सवाल है। यह serialization बनाम has_many के बारे में है, और मुझे वह समस्या नहीं होगी क्योंकि मैं एक बहुआयामी सरणी का उपयोग करूँगा। वह जवाब मेरे लिए उत्तर नहीं होगा, और सवाल मेरा से अलग है। – thesecretmaster
आह ... क्षमा करें। :( –