2013-02-06 11 views
5

मेरे रेल ऐप में, मैं डेटाबेस में स्थानों के कॉलम फ़ील्ड की भौगोलिक सीमाओं को संग्रहीत करना चाहता हूं। उदाहरण के लिए, न्यूयॉर्क की सीमा बहुभुज के रूप में दर्शायी जाती है: सरणी की एक सरणी।डेटाबेस अज्ञेयवादी डेटाबेस वाले बहुत बड़े टेक्स्ट फ़ील्ड के लिए मैं किस डेटा प्रकार का उपयोग कर सकता हूं?

मैंने बहुभुज को क्रमबद्ध करने के लिए अपना मॉडल घोषित कर दिया है, लेकिन मुझे यकीन नहीं है कि मुझे उन्हें इस तरह स्टोर करना चाहिए या नहीं। इन धारावाहिक बहुभुजों का आकार आसानी से 100,000 वर्णों से अधिक है, और MySQL केवल मानक टेक्स्ट फ़ील्ड में लगभग 65000 characters स्टोर कर सकता है।

अब मुझे पता है कि MySQL में भी LONGTEXT फ़ील्ड है। लेकिन मैं वास्तव में चाहता हूं कि मेरा ऐप डेटाबेस-अज्ञेयवादी हो। रेल अपने आप को कैसे संभालते हैं? क्या यह स्वचालित रूप से LONGTEXT फ़ील्ड में स्विच हो जाएगा? जब मैं PostgreSQL का उपयोग करना शुरू करता हूं तो क्या होगा?

+0

बीएलओबी के बारे में क्या? – m0skit0

+0

मुझे लगता है कि टेक्स्ट की समान सीमाएं हैं, और रेल एक स्ट्रिंग (वाईएएमएल के साथ) में क्रमबद्ध है। – Maarten

उत्तर

3

इस बिंदु पर मेरा सुझाव है कि आप खुद से पूछें - क्या इस डेटा को संग्रहीत करने की आवश्यकता है, या इस प्रारूप में डेटाबेस में स्टोर किया जाना चाहिए? फाइल सिस्टम में

  1. स्टोर अपने बहुभुज, और उन्हें डेटाबेस से संदर्भ:

    2 संभव समाधान का प्रस्ताव। डेटाबेस में इस तरह के बड़े डेटा आइटम का बहुत कम उपयोग होता है - यह पाठ के रूप में उनके खिलाफ पूछताछ करने के लिए व्यावहारिक रूप से व्यर्थ है। फ़ाइलों को संग्रहीत करने में फाइल सिस्टम अच्छा है - इसका इस्तेमाल करें।

  2. यदि आपको डेटाबेस में इन बहुभुजों की आवश्यकता है, तो उन्हें सामान्यीकृत डेटा के रूप में स्टोर करें। पॉलीगॉन नामक एक टेबल है, और दूसरा बिंदु कहा जाता है, बहुभुज को deserialize और इसे एक तरह से स्टोर करें जो इस तरह से दर्शाता है कि डेटाबेस का उपयोग करने के इरादे से है।

आशा है कि यह मदद की है।

+0

# 2 एक दिलचस्प विचार है, हालांकि जब तक बहुभुज अक्सर संशोधित नहीं होते हैं, यह एक और जटिल दृष्टिकोण है। – benzado

2

पोस्टग्रेस्क्ल में पोस्टजीआईएस नामक एक लाइब्रेरी है जिसे मेरी कंपनी ज्यामितीय स्थानों और गणनाओं को संभालने के लिए उपयोग करती है जो इस स्थिति में बहुत उपयोगी हो सकती हैं। मेरा मानना ​​है कि पोस्टग्रेस्क्ल में दो डेटा प्रकार भी हैं जो सरणी और हैंश की अनुमति देते हैं। Arrays घोषित किया गया है, उदाहरण के रूप में, text[] जहां पाठ को किसी अन्य डेटा प्रकार से बदला जा सकता है। हैश को हस्टोर मॉड्यूल का उपयोग करके परिभाषित किया जा सकता है।

+0

ओपी से: * "मैं वास्तव में चाहता हूं कि मेरा ऐप डेटाबेस-अज्ञेयवादी हो" * – m0skit0

1

भले ही आप डेटाबेस में इस तरह की सामग्री स्टोर कर सकते हैं, तो आपको इसे बाहरी रूप से संग्रहीत करने पर विचार करना चाहिए, और डेटाबेस में केवल एक यूआरएल या कुछ अन्य पहचानकर्ता डालना चाहिए।

यदि यह डेटाबेस में है, तो आप 64K डेटा को स्मृति में लोड कर सकते हैं जब आप इसका उपयोग नहीं करेंगे, सिर्फ इसलिए कि आप उस तालिका में कुछ एक्सेस करते हैं। और डेटाबेस तालिका की तुलना में केवल-पढ़ने वाली फ़ाइलों (अमेज़ॅन S3 जैसे कुछ का उपयोग करके) का संग्रह स्केल करना आसान है।

2

This question मेरे प्रश्न का उत्तर दें: रेल 65535 की डिफ़ॉल्ट बाइट सीमा सेट करते हैं, और आप इसे मैन्युअल रूप से बदल सकते हैं।

सब कुछ, चाहे आप परेशानी में भाग लेंगे, उसके बाद आप जिस डेटाबेस का उपयोग कर रहे हैं उस पर निर्भर करता है। MySQL के लिए, रेल स्वचालित रूप से उचित * टेक्स्ट फ़ील्ड पर स्विच हो जाएंगे। MySQL टेक्स्ट के to 1GB स्टोर कर सकता है।

लेकिन बेंजाडो और थॉमसफेडब की तरह, यह संभवतः फ़ाइल में जानकारी को स्टोर करना बेहतर है ताकि डेटाबेस बहुत सारी स्मृति आवंटित न करे जो शायद उपयोग नहीं किया जा सकता है।

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