मैं एक बहुत विशिष्ट उपयोग के मामले में इन-मेमोरी ऑब्जेक्ट डेटाबेस डिज़ाइन कर रहा हूं। यह एकल लेखक है, लेकिन कुशल समवर्ती पठन का समर्थन करना चाहिए। रीड्स को अलग किया जाना चाहिए। कोई क्वेरी भाषा नहीं है, डेटाबेस केवल समर्थन करता है:
- ऑब्जेक्ट / -s को विशेषता के आधार पर / विशेषताओं के सेट (अभिव्यक्ति के लिए समर्थन हो सकता है, उदाहरण के लिए
x.count < 5
) - ऑब्जेक्ट की विशेषता प्राप्त करें
एक क्वेरी एक अनिवार्य स्क्रिप्ट है जो उपरोक्त कार्यों की एक मनमानी संख्या से बना है। डेटा का आकार << मेमोरी होगा, इसलिए अधिकांश विशेषताओं पर सभी ऑब्जेक्ट और सूचकांकों को स्वैप किए बिना आराम से फिट होना चाहिए।
मुझे ऑब्जेक्ट की विशेषता इंडेक्स के लिए एक डेटा संरचना की आवश्यकता है, जो लिखने पर O (n) हो सकता है, लेखन संगति का समर्थन नहीं कर सकता, लेकिन आदर्श रूप से O (1) स्नैपशॉट (शायद लिखने पर कॉपी) और O (logN) एक्सेस का समर्थन करना चाहिए। आदर्श रूप से यह संस्करणों के बीच अधिकतम संरचनात्मक साझाकरण के साथ रीड्स पर उच्च संगामिति की अनुमति देगा।
मैं CTries , समवर्ती BSTs और समवर्ती Splay पेड़ देख रहा था , लेकिन मुझे यकीन नहीं है कि मैं वास्तव में यहाँ सही दिशा में देख रहा हूँ। उपरोक्त संरचना आवेषण की जटिलता पर बहुत ध्यान देती है जिसके बारे में मुझे परवाह नहीं है।
प्रश्न : क्या कोई ज्ञात डेटा संरचना है जो बॉक्स के बाहर मेरे उपयोग के मामले के लिए एक अच्छा फिट है?
EDIT : कुछ और सोचने के बाद ऐसा लगता है कि लगातार BST / Splay ट्री काम करेगा। लेखक 'मास्टर' कॉपी को अपडेट करेगा और प्रश्नों के निष्पादन की शुरुआत के रूप में पेड़ को प्राप्त करेगा और उन्हें पूरा करने के बाद इसे फेंक देगा। हालाँकि, मैं अभी भी दिलचस्पी रखता हूँ अगर वहाँ एक बेहतर समाधान है।