पृष्ठभूमि
एक स्थानीय डेटाबेस में लगभग 1.3 बिलियन अद्वितीय पंक्तियाँ होती हैं। प्रत्येक पंक्ति अप्रत्यक्ष रूप से एक विशिष्ट अक्षांश और देशांतर (स्थान) से जुड़ी होती है। प्रत्येक पंक्ति में एक तारीख मोहर होती है।
उदाहरण
समस्या इस प्रकार है:
- उपयोगकर्ता एक प्रारंभिक / समाप्ति तिथि और मूल्यों की एक श्रेणी (जैसे, 100 से 105) निर्धारित करता है।
- सिस्टम सभी पंक्तियों को इकट्ठा करता है जो दी गई तारीख से मेल खाते हैं, स्थान के अनुसार समूहीकृत।
- सिस्टम उन स्थानों को निर्धारित करता है जो उन तिथियों के दौरान मूल्यों की दी गई सीमा में गिरने की सांख्यिकीय संभावना रखते हैं।
- सिस्टम उपयोगकर्ता के सभी मिलान स्थानों को प्रदर्शित करता है।
यह गति और पैमाने की समस्या है।
सवाल
कम से कम महंगी समाधान वास्तुकला क्या है जो आप कल्पना कर सकते हैं कि इस तरह की प्रणाली पांच सेकंड के भीतर उपयोगकर्ताओं के लिए परिणाम प्राप्त करने की अनुमति देगी?
वर्तमान व्यवस्था
पर्यावरण वर्तमान में है:
- PostgreSQL 8.4 (उन्नयन संभव है; डेटाबेस स्विच करना एक विकल्प नहीं है)
- आर और पीएल / आर
- XFS
- डब्लू डब्लू
- 8 GB RAM (Corsair G.Skill; 1.3 GHz)
- क्वाड कोर जेनुएल 7 (2.8 गीगाहर्ट्ज़)
- उबंटू 10.10
हार्डवेयर अपग्रेड स्वीकार्य हैं।
अद्यतन - डेटाबेस संरचना
अरबों पंक्तियाँ एक तालिका के सदृश हैं:
id | taken | location_id | category | value1 | value2 | value3
- आईडी - प्राथमिक कुंजी
- लिया - दिनांक पंक्ति को सौंपा गया
- location_id - अक्षांश / देशांतर का संदर्भ
- श्रेणी - डेटा का विवरण
- value1 .. 3 - उपयोगकर्ता जो अन्य मान क्वेरी कर सकता है
taken
स्तंभ आम तौर पर प्रति लगातार तारीखों है location_id
, कभी कभी प्रत्येक स्थान 1800 से 2010 तक की डेटा है (के रूप में प्रत्येक स्थान समान दिनांक सीमा में डेटा है 77,000 के बारे में दिनांक, उनमें से कई दोहराया गया)।
सात श्रेणियां हैं और तालिकाओं को पहले से ही श्रेणी (बाल तालिकाओं का उपयोग करके) से विभाजित किया गया है। प्रत्येक श्रेणी में ~ 190 मिलियन पंक्तियाँ हैं। निकट भविष्य में, प्रति श्रेणी पंक्तियों की संख्या एक बिलियन से अधिक होगी।
लगभग 20,000 स्थान और 70,000 शहर हैं। अक्षांश और देशांतर से शहर के लिए स्थान परस्पर संबंधित हैं। प्रत्येक स्थान को किसी विशेष शहर में निर्दिष्ट करने का मतलब है कि शहर की सीमाएं ढूंढना, जो कि एक तुच्छ कार्य नहीं है।
विचार
मेरे पास कुछ विचार शामिल हैं:
- डेटाबेस को होस्ट करने के लिए क्लाउड सेवा खोजें।
- एक एसएसडी छापे पट्टी (महान वीडियो) बनाएं ।
- शहर (पूर्व-गणना) द्वारा सभी स्थानों को समेटने वाली एक तालिका बनाएँ।
धन्यवाद!