मैं एक प्रोजेक्ट कर रहा हूं जो संरचित दस्तावेज़ डेटाबेस से संबंधित है। मेरे पास श्रेणियों का एक पेड़ है (~ 1000 श्रेणियां, प्रत्येक स्तर पर ~ 50 श्रेणियों तक), प्रत्येक श्रेणी में संरचित दस्तावेजों के कई हजारों (ऊपर, कहते हैं, ~ 10000) शामिल हैं। प्रत्येक दस्तावेज़ कुछ संरचित रूप में कई किलोबाइट है (मैं YAML पसंद करूंगा, लेकिन यह केवल JSON या XML हो सकता है)।
इस प्रणाली के उपयोगकर्ता कई प्रकार के संचालन करते हैं:
- आईडी द्वारा इन दस्तावेजों को पुनः प्राप्त करना
- उनके अंदर कुछ संरचित विशेषताओं द्वारा दस्तावेजों की खोज
- संपादन दस्तावेज़ (यानी जोड़ने / हटाने / नाम बदलने / विलय); प्रत्येक संपादन ऑपरेशन को कुछ टिप्पणी के साथ लेनदेन के रूप में दर्ज किया जाना चाहिए
- किसी विशेष दस्तावेज़ के लिए रिकॉर्ड किए गए परिवर्तनों का इतिहास देखना (यह देखने के लिए कि कौन, कब और क्यों दस्तावेज़ बदल गया है, पहले वाला संस्करण प्राप्त कर रहा है - और शायद अनुरोध किए जाने पर यह इस पर वापस लौटना)
बेशक, पारंपरिक समाधान इस समस्या के लिए कुछ प्रकार के दस्तावेज़ डेटाबेस (जैसे काउचडी या मैंगो) का उपयोग कर रहा होगा - हालांकि, इस संस्करण नियंत्रण (इतिहास) चीज़ ने मुझे एक जंगली विचार के लिए लुभाया - मुझे एक के git
रूप में भंडार का उपयोग क्यों नहीं करना चाहिए इस एप्लिकेशन के लिए डेटाबेस बैकएंड?
पहली नज़र में, इसे इस तरह हल किया जा सकता है:
- श्रेणी = निर्देशिका, दस्तावेज़ = फ़ाइल
- आईडी द्वारा दस्तावेज़ प्राप्त करना => निर्देशिकाओं को बदलना + एक काम की प्रतिलिपि में एक फ़ाइल पढ़ना
- संपादन टिप्पणियों के साथ दस्तावेज़ संपादित करना => विभिन्न उपयोगकर्ताओं द्वारा कमिट करना + प्रतिबद्ध संदेश संग्रहीत करना
- इतिहास => सामान्य लेनदेन लॉग और पुराने लेनदेन की पुनर्प्राप्ति
- खोज => यह एक छोटा सा पेचीदा हिस्सा है, मुझे लगता है कि इसे संबंधित डेटाबेस में किसी श्रेणी के आवधिक निर्यात की आवश्यकता होगी जिसमें हम उन स्तंभों को अनुक्रमित कर सकें जिन्हें हम खोजने की अनुमति देंगे।
क्या इस समाधान में कोई अन्य सामान्य नुकसान हैं? क्या किसी ने पहले से ही इस तरह के बैकएंड को लागू करने की कोशिश की है (यानी किसी भी लोकप्रिय फ्रेमवर्क के लिए - RoR, node.js, Django, CakePHP)? क्या इस समाधान का प्रदर्शन या विश्वसनीयता पर कोई संभावित प्रभाव है - यानी क्या यह साबित होता है कि पारंपरिक डेटाबेस समाधानों की तुलना में git बहुत धीमा होगा या इसमें कोई स्केलेबिलिटी / विश्वसनीयता की कमी होगी? मुझे लगता है कि ऐसे सर्वरों का एक समूह जो एक दूसरे के भंडार को धक्का / खींचते हैं, वे काफी मजबूत और विश्वसनीय होने चाहिए।
मूल रूप से, मुझे बताएं कि क्या यह समाधान काम करेगा और यह क्यों करेगा या नहीं करेगा?