मैं छोटे उद्यम ग्राहकों के लिए वेब आधारित क्लोजर एप्लिकेशन के रूप में एक वीबी पर आधारित (स्थानीय रूप से स्थापित) एप्लिकेशन (इनवॉइस + इन्वेंट्री) को फिर से लिखने पर देख रहा हूं। मैं इसे इसी तरह के व्यापार में ग्राहकों के लिए एक सास आवेदन के रूप में पेश करने का इरादा कर रहा हूं।
मैं डेटाबेस विकल्प देख रहा था: मेरी पसंद एक RDBMS था: Postgresql / MySQL। मैं पहले वर्ष में 400 उपयोगकर्ताओं को स्केल कर सकता हूं, आम तौर पर प्रति उपयोगकर्ता 20-40 पृष्ठ / प्रति दिन - ज्यादातर लेन-देन स्थिर विचारों के लिए नहीं। प्रत्येक दृश्य में डेटा और अपडेट डेटा शामिल होंगे। ACID अनुपालन आवश्यक है (या तो मुझे लगता है)। इसलिए लेन-देन की मात्रा बहुत बड़ी नहीं है।
यह मेरी प्राथमिकता के आधार पर इनमें से किसी को लेने के लिए एक नो-ब्रेनर होता, लेकिन इस एक आवश्यकता के लिए, जो मेरा मानना है कि एक सास ऐप की खासियत है: स्कीमा बदल रही होगी क्योंकि मैं और अधिक ग्राहक / उपयोगकर्ता जोड़ूंगा और प्रत्येक ग्राहक के लिए बदलती व्यावसायिक आवश्यकता (मैं केवल शुरू करने के लिए कुछ सीमित लचीलेपन की पेशकश करूंगा)। जैसा कि मैं एक डीबी विशेषज्ञ नहीं हूं, इस आधार पर कि मैं क्या सोच सकता हूं और पढ़ा है, मैं इसे कई तरीकों से संभाल सकता हूं:
- एक पारंपरिक DBBMS स्कीमा MySQl / Postgresql में एक ही DB कई किरायेदारों की मेजबानी के साथ है। और भविष्य के परिवर्तनों की अनुमति देने के लिए प्रत्येक तालिका में पर्याप्त "मुक्त-फ़्लोटिंग" कॉलम जोड़ें क्योंकि मैं किसी मौजूदा ग्राहक के लिए अधिक ग्राहक या परिवर्तन जोड़ता हूं। हर बार जब स्कीम में एक छोटा सा बदलाव किया जाता है, तो यह डीबी में परिवर्तन के प्रचार का एक नकारात्मक पहलू हो सकता है। मुझे याद है कि Postgresql स्कीमा अपडेट में लॉकिंग के बिना वास्तविक समय में किया जा सकता है। लेकिन यकीन नहीं है, इस उपयोग के मामले में कितना दर्दनाक या कितना व्यावहारिक है। और साथ ही, स्कीमा परिवर्तन के रूप में नए / मामूली SQL परिवर्तनों को भी पेश कर सकते हैं।
- RDBMS रखें, लेकिन डेटाबेस स्कीमा को लचीले तरीके से डिज़ाइन करें: इकाई-विशेषता-मान के करीब या कुंजी-मान स्टोर के रूप में। (कार्य दिवस, उदाहरण के लिए FriendFeed)
- संपूर्ण चीज़ को इन-मेमोरी में ऑब्जेक्ट के रूप में रखें और उन्हें लॉग फ़ाइलों में समय-समय पर संग्रहीत करें। (उदाहरण के लिए, edval, lmax)
- MongoDB या Redis जैसे NoSQL DB के लिए जाएं। लेकिन जो मैं इकट्ठा कर सकता हूं, उसके आधार पर, वे इस उपयोग-मामले के लिए उपयुक्त नहीं हैं और पूरी तरह से एसीआईडी अनुरूप नहीं हैं।
- कुछ NewSQL Dbs जैसे VoltDb या JustoneDb (क्लाउड आधारित) के लिए जाएं जो SQL और ACID के अनुरूप व्यवहार को बनाए रखते हैं और "नए-जीन" RDBMS हैं।
- मैंने neo4j (ग्राफडब) को देखा, लेकिन यह सुनिश्चित नहीं हुआ कि यह उपयोग-मामला फिट होगा या नहीं
मेरे उपयोग के मामले में, स्केलेबिलिटी या वितरित कंप्यूटिंग से अधिक, मैं "स्कीमा + एसीआईडी + कुछ उचित प्रदर्शन में लचीलापन" प्राप्त करने के लिए एक बेहतर तरीका देख रहा हूं। अधिकांश लेख मुझे स्कीमा में लचीलेपन की शुद्ध बात पर मिल सकते हैं, जो ACID / लेन-देन पक्ष से बाहर निकलते समय प्रदर्शन (NoSQL DBs के मामले में) और स्केलेबिलिटी के कारण होता है।
क्या यह 'स्कीमा लचीलेपन बनाम एसीआईडी' लेनदेन का "या तो" मामला है या कोई बेहतर तरीका है?