जावा एंबेडेड डेटाबेस तुलना [बंद]


99

मैं अपने वित्त के प्रबंधन के लिए एक छोटा (जावा) एप्लिकेशन विकसित करने का इरादा रखता हूं। मेरा मानना ​​है कि मुझे एक एम्बेडेड डेटाबेस का उपयोग करने की आवश्यकता है, लेकिन मुझे इस मुद्दे के बारे में कोई अनुभव नहीं है। मैंने कुछ उपलब्ध उत्पादों को देखने की कोशिश की , लेकिन मैं यह तय नहीं कर सकता कि कौन सा मेरे लिए अधिक उपयुक्त होगा। H2 , HSQLDB , डर्बी और बर्कले DB अच्छे उम्मीदवार लगते हैं, लेकिन मैं अभी भी यह नहीं देखता कि वे एक-दूसरे की तुलना कैसे करते हैं। मैं उनकी तुलना करने में आपकी मदद की सराहना करता हूं और मुझे यह तय करने में मदद करता हूं कि किसका उपयोग करना है।

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

धन्यवाद।


यह जानने के बिना कि आप क्या करने की कोशिश कर रहे हैं, इस सवाल का जवाब देना संभव नहीं है। मैं आपके प्रोजेक्ट के आकार के बारे में जानकारी के साथ प्रश्न को अपडेट करने का सुझाव देता हूं, आपके हिसाब से आपके पास कितने टेबल होंगे, कितने रिकॉर्ड होंगे, आदि
Outlaw Programmer



5
यह गुस्सा है कि नाजियों द्वारा ऐसे अच्छे सवालों को बंद कर दिया गया है। ज़रूर, कुछ अस्पष्ट प्रश्न उपयुक्त नहीं हैं, लेकिन यह सबसे निश्चित रूप से है। जहाँ "उपयुक्त" का अर्थ समुदाय के लिए उपयोगी है, बजाय कुछ कानूनी परिभाषाओं के।
Tuntable

जवाबों:


60

भी

  • HSQLDB - OpenOffice, परीक्षण और स्थिर द्वारा उपयोग किया जाता है। इसका उपयोग करना आसान है। यदि आप अपने db-data को संपादित करना चाहते हैं, तो आप फ़ाइल को खोल सकते हैं और सम्मिलित विवरण संपादित कर सकते हैं।

या

  • H2 - तेज होने के लिए कहा (डेवलपर द्वारा, जिसने मूल रूप से hsqldb को डिजाइन किया था)

आप जो उपयोग करते हैं, वह आपके ऊपर निर्भर करता है कि आपको कितना प्रदर्शन और कितनी स्थिरता की आवश्यकता है।

H2 के डेवलपर ने एक अच्छा प्रदर्शन मूल्यांकन किया है:
http://www.h2database.com/html/performance.html


35

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

मैंने लगभग 3 साल पहले HSQLDB और हाइपरसोनिक का उपयोग किया था। यह उस समय कुछ प्रमुख प्रदर्शन के मुद्दे हैं और मैं उन मुद्दों के कारण डर्बी से स्विच करता हूं। जब यह अपाचे में इनक्यूबेटर में था तब भी डर्बी ठोस है।


डर्बी महान होगा अगर यह इस तथ्य के लिए नहीं था कि इतने सारे कीड़े हैं और आखिरी अपडेट कई साल पहले था।
हूलि

2
@ हुली मैं बग्स में नहीं जा सकता, लेकिन "... आखिरी अपडेट कई साल पहले था" गलत है। बार जब आप अपने टिप्पणी पोस्ट के सापेक्ष ( अगस्त वर्ष 2016 ): वहाँ एक रिलीज एक साल से भी कम से पहले (था अक्टूबर 2015 ), दो महीने (के बाद एक रिलीज अक्टूबर वर्ष 2016 ), और के बाद सिर्फ एक वर्ष से अधिक एक रिलीज ( अक्टूबर 2017 - नवीनतम )।
स्लाव

इस विषय पर किसी अन्य व्यक्ति की खोज में इस टिप्पणी को अपडेट करने पर। डर्बी सबसे हालिया रिलीज़ मार्च / 2019 में थी। यहाँ उनकी साइट की जानकारी है: db.apache.org/derby
JavaJd

@ क्रिस डेल क्या आपने सामान्य रिकॉर्ड के रूप में या मेमोरी में या कुछ कैशिंग के लिए डर्बी का उपयोग किया था?
श्रेयांस जैन

30

मुझे अपने एक प्रोजेक्ट में जावा एम्बेडेड डेटाबेस का उपयोग करने की आवश्यकता थी और मैंने प्रत्येक डेटाबेस के पेशेवरों और विपक्षों के बारे में बहुत अधिक शोध किया। मैंने लोकप्रिय एम्बेडेड जावा डेटाबेस (H2, HSQLDB, डर्बी, ObjectDB, Neo4j, OrientDB) के ब्लॉग लिस्टिंग पेशेवरों और विपक्षों को लिखा, आप इस पर एक नज़र डाल सकते हैं। मैंने H2 को चुना क्योंकि मुझे लगा कि यह मेरी आवश्यकताओं के अनुकूल है। ब्लॉग के लिए लिंक: http://sayrohan.blogspot.in/2012/12/choosing-light-weight-weight-java-database.html आशा है कि यह मदद करता है!



14

HSQLDB एक अच्छा उम्मीदवार है (तथ्य यह है कि इसका उपयोग OpenOffice में किया जाता है, आप में से कुछ को आश्वस्त कर सकते हैं), लेकिन इस तरह के एक छोटे से अनुप्रयोग के लिए, ऑब्जेक्ट डेटाबेस (एक क्लासिक रिलेशन डेटाबेस के बजाय) का उपयोग क्यों नहीं किया जाता है?

मैंने अपनी एक परियोजना में DB4O का उपयोग किया , और मैं इससे बहुत संतुष्ट हूं। ऑब्जेक्ट-ओरिएंटेड होने के नाते, आपको संपूर्ण हाइबरनेट परत की आवश्यकता नहीं है, और सीधे ऑब्जेक्ट को सम्मिलित / अपडेट / डिलीट / क्वेरी कर सकते हैं! इसके अलावा, आपको स्कीमा के बारे में चिंता करने की ज़रूरत नहीं है, आप सीधे वस्तुओं के साथ काम करते हैं और DB4O बाकी काम करता है!

मैं सहमत हूं कि इस नए प्रकार के डेटाबेस के लिए उपयोग होने में कुछ समय लग सकता है, लेकिन DB40 के साथ काम करना कितना आसान है, यह देखने के लिए DB40 ट्यूटोरियल की जांच करें !

संपादित करें: जैसा कि टिप्पणियों में कहा गया है, DB4O कक्षाओं के नए संस्करणों को स्वचालित रूप से संभालता है। इसके अलावा, एप्लिकेशन के बाहर डेटाबेस को ब्राउज़ करने और अपडेट करने का एक उपकरण यहां उपलब्ध है: http://code.google.com/p/db4o-om/


2
धन्यवाद। DB4O इस तरह के एक छोटे से प्रोजेक्ट के लिए अच्छा है, लेकिन मेरा मानना ​​है कि एप्लिकेशन के बाहर डेटा ब्राउज़ करने और संपादित करने की क्षमता बहुत महत्वपूर्ण है। इसके अलावा कक्षाओं के नए संस्करणों को संभालना आसान होगा? (उदाहरण के लिए / हटाए गए क्षेत्र)
होसम ऐली

जैसा कि मेरे संपादन में कहा गया है, एप्लिकेशन के बाहर DB को ब्राउज़ करने और संपादित करने के लिए एक उपकरण मौजूद है। और जैसा कि फेबियन ने कहा, कक्षाओं के नए संस्करण स्वचालित रूप से हैंडेल्ड हैं।
22

अद्यतन के लिए धन्यवाद। ब्राउज़िंग टूल का होना मेरे लिए बहुत महत्वपूर्ण था, इसलिए बहुत बहुत धन्यवाद।
होसम ऐली

12

जावा डीबी (अपाचे डर्बी का सूर्य वितरण) अब जेडीके 6 में जहाज करता है !

मैं जेसन कोहेन की तरह कुछ करना चाहता हूं और यह सोच रहा था कि यह सबसे आसान तरीका है जैसे कि जेडीके डिस्ट्रो में (पिछले सप्ताह में से कौन सा अब मेरे ऐप के लिए एक आवश्यकता है)। या शायद मैं उस तरह से आलसी हूं।


शायद तुम सही हो! हमें जावा 1.5 के तहत भी चलने की आवश्यकता है इसलिए यह हमारे लिए कोई विकल्प नहीं है।
जेसन कोहेन

... मेरा मतलब था कि आप इसके बारे में सही थे कि यह सबसे आसान तरीका है, आलसी होने के बारे में सही नहीं है। :-P
जेसन कोहेन

जावा डीबी केवल जेडीके के सूर्य / ओरेकल कार्यान्वयन के साथ जहाज। जावा का एक मानक हिस्सा नहीं है।
il:

7

हम अपने आवेदन के लिए "नो-कॉन्फ़िगरेशन" विकल्प के रूप में उत्पादन में HSQLDB का उपयोग करते हैं। यह लोगों को वास्तविक डेटाबेस स्थापित करने की परेशानी के बिना परीक्षण करने की अनुमति देता है।

हालाँकि हम सामान्य उपयोग के लिए इसका समर्थन नहीं करते हैं। कारण कई हैं:

  1. डेटा के आकार के अनुपात में धीमा हो जाता है।
  2. हमारे ऐप के बाहर पहुंचना मुश्किल है (उदाहरण के लिए कस्टम रिपोर्ट)।
  3. लेन-देन / डिस्क-सिंक सही होना मुश्किल है, इसलिए डेटा खोना आसान है।

कम से कम (2) और (3) के लिए, इसके चारों ओर तरीके हैं लेकिन यह मुश्किल है; यह MySQL स्थापित करने के लिए बहुत आसान है।


7

neo4j है:

एक एंबेडेड, डिस्क-बेस्ड, पूरी तरह से ट्रांस्जेक्शनल जावा पर्सिस्टेंस इंजन, जो टेबल्स के बजाय ग्राफ़ में संरचित डेटा को स्टोर करता है

मुझे अभी तक इसे आज़माने का मौका नहीं मिला है - लेकिन यह बहुत ही आशाजनक है। ध्यान दें कि यह एक SQL डेटाबेस नहीं है - आपका ऑब्जेक्ट ग्राफ़ आपके लिए बना रहता है - इसलिए यह आपके मौजूदा ऐप के लिए उपयुक्त नहीं हो सकता है।



5

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


5

HSQLDB बड़े अनुप्रयोगों के लिए समस्याएँ पैदा कर सकता है, यह काफी स्थिर नहीं है।

सबसे अच्छा मैंने सुना है (हालांकि पहले हाथ का अनुभव नहीं है) berkleyDB है। लेकिन जब तक आप इसे ओपन सोर्स नहीं करते हैं, लाइसेंस के कारण उपयोग करने के लिए आपको एक हाथ और एक पैर का खर्च आएगा ... इसे देखें http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html ब्योरा हेतु।

ps। यदि आप नहीं जानते, तो berkleyDB एक संबंधपरक डेटाबेस नहीं है।


ओह, मुझे नहीं पता था कि बर्कले एक संबंधपरक डेटाबेस नहीं था! आपका बहुत बहुत धन्यवाद!
होसम ऐली

यह अच्छा नहीं है मतलब नहीं है। लेकिन मुझे संदेह है कि शायद यह आपके व्यक्तिगत उपयोग के लिए बहुत अच्छा है। इसके अलावा, sqlite पर एक नज़र डालें। मुझे लगता है कि इसमें जावा बाइंडिंग है, लेकिन यह एटम नहीं मिल सकता है।
चीयि

4

मैं .नेट और जावा दोनों के लिए DB4O का बहुत बड़ा प्रशंसक हूं

शुरुआती रिलीज के बाद से प्रदर्शन काफी बेहतर हो गया है। लाइसेंसिंग मॉडल बहुत बुरा नहीं है, या तो। मुझे आपकी वस्तुओं को क्वेरी करने के लिए उपलब्ध विकल्प विशेष रूप से पसंद हैं। उदाहरण के लिए क्वेरी बहुत शक्तिशाली और उपयोग में आसान है।


4

इनका मूल्यांकन करने के लिए आप किन मानदंडों का उपयोग करेंगे? यदि आप अभी तक नहीं जानते हैं, तो आपको अभी निर्णय लेने की आवश्यकता नहीं है। अपने एप्लिकेशन को डेटाबेस-कार्यान्वयन-अज्ञेय के रूप में बनाने की कोशिश करें - आप उचित रैपर, डेटा एक्सेस ऑब्जेक्ट आदि प्रदान कर सकते हैं, और यह निर्णय तब कर सकते हैं जब आपके पास सभी तथ्य हाथ में हों और आपको निर्णय लेना होगा।

यदि आप रिलेशनल डेटाबेस और एसक्यूएल का उपयोग कर रहे हैं, तो उपरोक्त बहुत कठिन नहीं होना चाहिए (जेडडीबीसी आदि का उपयोग करके)। सुनिश्चित करें कि आपके पास बहुत सारे परीक्षण हैं ताकि जब आप डेटाबेस के बीच स्विच करना चाहें, तो आप यह निर्धारित कर सकते हैं कि आपके आवेदन की कार्यक्षमता समान है।

मैं कुछ समय पहले इसी मुद्दे पर भाग गया था। मुझे नहीं पता था कि किस डेटाबेस के लिए जाना है, इसलिए मेरे पहले समाधान ने डर्बी (या एचएसक्यूएलडीबी?) का उपयोग किया, और मैं बाद में एचएसक्यूएलडीबी (या डर्बी पर स्विच करने में सक्षम था; याद नहीं कर सकता कि कौन सा समाधान काम किया) एक बार मैं निर्धारित करूँगा कि मैं कहाँ निर्धारित किया था मेरे पास मुद्दे (प्रदर्शन से संबंधित) थे और जो समाधान वास्तव में मेरे लिए काम करेंगे।


3

मैंने डर्बी का उपयोग किया है और मुझे वास्तव में डेटा प्रकार रूपांतरण कार्यों से नफरत है, विशेष रूप से दिनांक / समय फ़ंक्शन। (संख्या प्रकार) <-> वर्चर रूपांतरण यह एक दर्द है।

ताकि यदि आप अपने DB स्टेटमेंट्स में डेटा टाइप रूपांतरणों का उपयोग करने की योजना बनाते हैं, तो वह डीबेड एम्बेडेड डीबी के उपयोग पर विचार करें, मैं इसे बहुत देर से सीखता हूं।

नवीनतम डर्बी संस्करण डेटा प्रकार रूपांतरण


3

मैं व्यक्तिगत रूप से HSQLDB का समर्थन करता हूं, लेकिन ज्यादातर क्योंकि यह पहली बार मैंने कोशिश की थी।

H2 को तेज कहा जाता है और यह एक अच्छे GUI का दृश्य प्रदान करता है (जो सामान्य है और किसी भी JDBC ड्राइवर के साथ काम करता है)।

कम से कम HSQLDB, H2 और डर्बी सर्वर मोड प्रदान करते हैं जो विकास के लिए बहुत अच्छा है, क्योंकि आप एक ही समय में अपने एप्लिकेशन और कुछ टूल के साथ DB तक पहुंच सकते हैं (जो एम्बेडेड मोड आमतौर पर अनुमति नहीं देता है)।


3

मुझे लगता है कि मैं इस पोस्ट में थोड़ा लेट (बहुत देर से; ;-)) हूँ, लेकिन मैं Perst, एक खुला स्रोत, जावा और .NET के लिए ऑब्जेक्ट-ओरिएंटेड एम्बेडेड डेटाबेस जोड़ना चाहूंगा। आपके विचार के लिए। Perst जावा के लिए एक खुला स्रोत / दोहरी लाइसेंस एम्बेडेड डेटाबेस है। वितरण Google के एंड्रॉइड प्लेटफ़ॉर्म के साथ संगत है, और जावा एमई के लिए पेरस्ट लाइट भी शामिल है। हमने एक Android बेंचमार्क भी बनाया है और इस विषय पर एक श्वेतपत्र निर्मित किया है ... आप यहाँ देख सकते हैं: http://www.mcobject.com/index.cfm?fuseaction=download&pageid=581§ionid=133

ऑल द बेस्ट, क्रिस


3

अगर मैं सही हूँ H2 उन्हीं लोगों में से है जिन्होंने HSQLDB लिखा है। यदि आप अपनी साइट पर बेंचमार्क पर भरोसा करते हैं तो यह बहुत बेहतर है। इसके अलावा, कुछ धारणा है कि सूर्य समुदाय डर्बी में बहुत जल्दी कूद गया।


2
DerbyDB के बारे में समयपूर्व व्युत्पन्न धारणाएं किस बारे में चिंतित हैं? आयु वाले बच्चे?
सिमगिनेर

2

मुझे एहसास हुआ कि आपने एसक्यूएल ब्राउज़िंग का उल्लेख किया है, लेकिन आपके प्रश्न में बाकी सब कुछ मुझे सुझाव देना चाहता है कि आप डीबी 4 ओ पर भी विचार करें , जो एक शानदार, सरल डीबी है


धन्यवाद। DB4O इस तरह के एक छोटे से प्रोजेक्ट के लिए अच्छा है, लेकिन मेरा मानना ​​है कि एप्लिकेशन के बाहर डेटा ब्राउज़ करने और संपादित करने की क्षमता बहुत महत्वपूर्ण है। इसके अलावा कक्षाओं के नए संस्करणों को संभालना आसान होगा? (उदा। जोड़ा गया / हटाए गए क्षेत्र)
होसम ऐली

हां, यह स्वचालित रूप से कुछ रिफैक्टरिंग का समर्थन करता है, आप इसके बारे में और अधिक जानकारी यहां पा सकते हैं: ibm.com/developerworks/java/library/j-db4o3.html
फेबियन स्टिग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.