2009-07-21 7 views
8

मुझे टैबलेट प्रारूप में कुछ सरल डेटा के लिए स्टोरेज फ़ाइल प्रारूप बनाने की आवश्यकता है, एचडीएफ 5 का उपयोग करने की कोशिश कर रहा था, लेकिन कुछ मुद्दों के कारण इसे छोड़ दिया गया है, और मैं ' डी एम्बेडेड डेटाबेस के उपयोग को फिर से जांचने के लिए यह देखने के लिए कि वे मेरे आवेदन के लिए पर्याप्त तेज़ हैं या नहीं।जावा एम्बेडेड डेटाबेस w/एक फ़ाइल के रूप में स्टोर करने की क्षमता

क्या वहां एक प्रतिष्ठित एम्बेडेड जावा डेटाबेस है जिसमें डेटा को एक फ़ाइल में स्टोर करने का विकल्प है? केवल एक जिसे मैं जानता हूं वह SQLite है (जावा बाइंडिंग उपलब्ध है)। मैंने एच 2 और एचएसक्यूएलडीबी की कोशिश की लेकिन बॉक्स के बाहर वे कई फाइलें बनाने लगते हैं, और मेरे लिए एक फाइल में डेटाबेस रखना बेहद वांछनीय है।

संपादित करें: उचित रूप से तेज़ प्रदर्शन महत्वपूर्ण है। ऑब्जेक्ट स्टोरेज नहीं है; प्रदर्शन चिंताओं के लिए मुझे केवल पूर्णांक और बीएलओबी स्टोर करने की आवश्यकता है। (+ कुछ तार लेकिन कुछ भी महत्वपूर्ण प्रदर्शन नहीं)

संपादित 2: भंडारण डेटा दक्षता बड़े डेटासेट के लिए महत्वपूर्ण है, इसलिए एक्सएमएल बाहर है।

+0

क्या आपने अपाचे डर्बी/जावाडीबी की कोशिश की है? मुझे नहीं पता कि यह दृश्यों के पीछे डेटा कैसे स्टोर करता है, लेकिन यह एक और चीज है जिसे आप देख सकते हैं। –

+0

फायरबर्ड निश्चित रूप से उचित तेज़ आवश्यकता को पूरा करता है। :) – jsight

+0

https://github.com/jankotek/MapDB – kervin

उत्तर

0

मुझे लगता है कि अब मैं लगातार डेटा स्टोरेज के लिए एचडीएफ 5 का उपयोग करना जारी रखूंगा, एच 2 या इन-मेमोरी इंडेक्सिंग के लिए कुछ अन्य डेटाबेस के साथ। मुझे जावा चालक के साथ बीएलओबी का उपयोग करने के लिए SQLite नहीं मिल सकता है, और मैं फ़ायरबर्ड को एम्बेड और चला नहीं सकता, और मुझे अभी तक PAGE_STORE के साथ H2 पर भरोसा नहीं है।

2

एक बार मैंने ऑब्जेक्ट डेटाबेस का उपयोग किया जिसने अपना डेटा किसी फ़ाइल में सहेजा था। इसमें जावा और एक .NET इंटरफ़ेस है। शायद आप इस पर एक नजर डालना चाहें। इसे db4o कहा जाता है।

+1

+1 का प्रयास करें: db4o का उल्लेख करने के लिए, क्योंकि अगर आप – dfa

1

यदि आप किसी अन्य प्रोग्राम के साथ जहाज के लिए एक छोटे और तेज़ डेटाबेस की तलाश में हैं तो मैं Apache Derby जांचूंगा, मुझे नहीं पता कि आप एम्बेडेड-डेटाबेस को कैसे परिभाषित करेंगे, लेकिन मैंने इसे कुछ परियोजनाओं में डिबगिंग डेटाबेस के रूप में उपयोग किया है जो हो सकता है स्रोत के साथ चेक किया गया है और प्रत्येक डेवलपर मशीन तात्कालिक पर उपलब्ध है।

+1

नहीं थे तो अपाचे डर्बी अब जावा डीबी है। जैसे कि यह अच्छी तरह से प्रलेखित और समर्थित है, और शायद आपके आईडीई के साथ आया था। – daveb

0

चूंकि आपने स्क्लाइट का उल्लेख किया है, मुझे लगता है कि आप मूल डीबी (जब तक अच्छे जावा बाइंडिंग उपलब्ध हैं) पर ध्यान नहीं देते हैं। Firebird जावा के साथ अच्छी तरह से काम करता है, और डिफ़ॉल्ट रूप से एकल फ़ाइल भंडारण करता है।

एच 2 और एचएसक्यूएलडीबी दोनों उत्कृष्ट विकल्प होंगे, यदि आपके पास एकल फ़ाइल आवश्यकता नहीं है।

+1

क्या आप जेबर्ड ड्राइवर का उपयोग कर रहे हैं? –

1

यह एक एसक्यूएल इंजन नहीं है, लेकिन यदि आप PrevaylerXStream के साथ उपयोग करते हैं, तो आप आसानी से अपने सभी डेटा के साथ एक एकल एक्सएमएल फ़ाइल बना सकते हैं। (प्रीवाइलर इसे एक स्नैपशॉट फ़ाइल कहता है।)

हालांकि यह एसक्यूएल-आधारित नहीं है, और इसलिए थोड़ा कोहनी ग्रीस की आवश्यकता होती है, इसकी आत्मनिर्भर प्रकृति विकास (और विशेष रूप से अच्छा परीक्षण) को अधिक आसान बनाती है। इसके अलावा, यह अविश्वसनीय रूप से तेज़ और भरोसेमंद है।

3

यदि आपको केवल पढ़ने की आवश्यकता है तो H2 read the database files from a zip file पर सक्षम है।

इसी तरह यदि आपको दृढ़ता की आवश्यकता नहीं है तो एच 2 के केवल इन-मेमोरी संस्करण में संभव है।

यदि आपको पढ़ने/लिखने की पहुंच और दृढ़ता दोनों की आवश्यकता है, तो आप मानक SQL-type डेटाबेस के साथ भाग्य से बाहर हो सकते हैं, क्योंकि ये सभी समान रूप से इंडेक्स और डेटा फ़ाइलों को समान रूप से बनाए रखते हैं।

3

एच 2 केवल एक फ़ाइल का उपयोग करता है, यदि आप PAGE_STORE विकल्प के साथ नवीनतम H2 बिल्ड का उपयोग करते हैं। यह एक नई सुविधा है, इसलिए यह ठोस नहीं हो सकता है।

1

आप jdbm देखें - हम इसे कई परियोजनाओं पर उपयोग करते हैं, और यह काफी तेज़ है। यदि आप एसीआईडी ​​प्रकार के ऐप्स के लिए इसका उपयोग कर रहे हैं, तो यह 2 फाइलों (एक डेटाबेस फ़ाइल और एक लॉग फ़ाइल) का उपयोग करता है, लेकिन यदि आपको ठोस एसीआईडी ​​की आवश्यकता नहीं है तो आप सीधे डेटाबेस एक्सेस (कोई लॉग फ़ाइल) पर सीधे ड्रॉप कर सकते हैं।

जेडीबीएम आसानी से पूर्णांक और ब्लब्स (जो भी आप चाहते हैं) का समर्थन करेगा, और यह काफी तेज़ है। यह वास्तव में समरूपता के लिए डिज़ाइन नहीं किया गया है, इसलिए यदि आपके पास एकाधिक धागे हैं तो आपको लॉकिंग का प्रबंधन करना होगा, लेकिन यदि आप एक साधारण, ठोस एम्बेडेड डेटाबेस की तलाश में हैं, तो यह एक अच्छा विकल्प है।

+0

जेडीबीएम को http://www.mapdb.org/ पर MapDB के साथ लेखक द्वारा प्रतिस्थापित किया गया है। – kervin

+0

कुछ मजेदार इतिहास: जन कोटेक - बाद के जेडीबीएम योगदानकर्ताओं में से एक, लेकिन निश्चित रूप से मूल लेखक नहीं - इस परियोजना को मैपडब में फेंक दिया और इसके साथ कुछ अद्भुत काम किया है। mapdb अब jdbm की तरह दूरस्थ रूप से भी नहीं है - यह हर तरह से कल्पना करने योग्य है, और जनवरी प्रभावित होने के लिए बेहतर है। बाहर की जाँच करने लायक –

1

Chronicle Map एक एम्बेडेड शुद्ध जावा डेटाबेस है।

  • यह डेटा को एक फ़ाइल में संग्रहीत करता है, i। ई।

    ChronicleMap<Integer, String> map = ChronicleMap 
        .of(Integer.class, String.class) 
        .averageValue("my-value") 
        .entries(10_000) 
        .createPersistedTo(databaseFile); 
    
  • क्रॉनिकल मानचित्र (, महीनों के लिए अब सूचना दी कोई गंभीर भंडारण कीड़े, जबकि यह सक्रिय उपयोग में है) परिपक्व है।

  • परस्पर बेंचमार्क दिखाते हैं कि क्रॉनिकल मानचित्र the fastest और the most memory efficient जावा के लिए कुंजी-मूल्य स्टोर है।

आपके उपयोग के मामले के लिए प्रमुख नुकसान, कि क्रॉनिकल मानचित्र केवल एक साधारण कुंजी-मान मॉडल का समर्थन करता है है, लेकिन और अधिक जटिल समाधान हो यह की चोटी पर बना सकता है।

अस्वीकरण: मैं क्रॉनिकल मानचित्र का डेवलपर हूं।

1

नाइट्राट डाटाबेस http://www.dizitart.org/nitrite-database.html

NoSQL वस्तु (नाइट्राट a.k.a NO2) डेटाबेस NoSQL एम्बेडेड दस्तावेज़ दुकान API जैसे MongoDB साथ जावा में लिखा एक खुला स्रोत है। यह इन-मेमोरी और एकल फ़ाइल आधारित सतत स्टोर दोनों का समर्थन करता है।