2012-01-04 17 views
9

पर सहेजना संभव है। मैं SQL डेटाबेस की आवश्यकता के बिना हाइबरनेट का उपयोग कर फ़ाइल सिस्टम पर लगातार ऑब्जेक्ट्स को सहेजना चाहता हूं।क्या लगातार ऑब्जेक्ट को फ़ाइल सिस्टम

क्या यह संभव है?

+0

क्या आपका मतलब SQL डेटाबेस पर हाइबरनेट का उपयोग नहीं करना है? – everton

+2

@EvertonAgner ओपी एक फाइल सिस्टम पर बने रहने के लिए हाइबरनेट एपीआई का उपयोग करना चाहता है, न कि SQL डेटाबेस के लिए। – mcfinnigan

+0

हाइबरनेट मूल रूप से ऑब्जेक्ट-रिलेशनल मैपिंग टूल है। यदि आप संबंधपरक हिस्सा नहीं चाहते हैं, तो आप हाइबरनेट का उपयोग क्यों करना चाहते हैं? – skaffman

उत्तर

4

हाइबरनेट जेडीबीसी के शीर्ष पर काम करता है, इसलिए आपको केवल जेडीबीसी चालक और मिलान करने वाली हाइबरनेट बोली है।

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

बेशक अगर आप हाइबरनेट का उपयोग करने पर पूरी तरह से आग्रह नहीं करते हैं, तो कई अन्य विकल्प हैं।

+0

एसक्लाइट के बारे में क्या, जो फाइल सिस्टम पर लगातार डेटा के करीब आता है, यद्यपि यह SQL डेटाबेस के रूप में किया जाता है। –

+0

@bjarkef: हाँ, लेकिन यह सी में लिखा गया है, इसलिए यदि आप जावा एप्लिकेशन में इसका उपयोग करना चाहते हैं तो आप मंच स्वतंत्रता खो देंगे (या एकाधिक प्रतियां शामिल करनी होंगी)। –

+0

@ माइकल बोर्गवर्ड: वास्तव में SQLite के लिए जेडीबीसी ड्राइवर हैं, और इसके लिए एक हाइबरनेट बोली भी है। हालांकि, यह अनुशंसित नहीं है: अन्य एम्बेडेड डेटाबेस की तुलना में कार्यान्वयन बेहद धीमा है। – parasietje

-5

बेशक यह संभव है, आप बस फ़ाइल जावा की सुविधाओं कब उपयोग कर सकते हैं, तो निम्न चरणों की आवश्यकता है: -

  1. एक फ़ाइल वस्तु 2.Create FileInputStream की एक वस्तु बनाने के लिए (हालांकि तरीकों से उपयोग कर रहे हैं अन्य कक्षाएं)
  2. इस ऑब्जेक्ट को एक बफर ऑब्जेक्ट में लपेटें या बस java.util.Scanner के अंदर लपेटें।
  3. पिछले चरण में बनाए गए ऑब्जेक्ट के विशिष्ट लेखन कार्यों का उपयोग करें।

ध्यान दें कि आपकी ऑब्जेक्ट को Serializable इंटरफ़ेस लागू करना होगा। See following link,

+7

मुझे लगता है कि प्रश्न के पीछे पूरा विचार हैबर्ननेट एपीआई के माध्यम से करना है। –

+0

मैंने हाल ही में अपनी परियोजना में कोशिश की है लेकिन किसी भी तरह से मैं इसके लिए कोई समाधान नहीं ढूंढ पा रहा था इसलिए मुझे मूल जावा की मूल बातें का उपयोग करना पड़ा। हाइबरनेट एक फ्लैट फ़ाइल से पढ़ने का समर्थन करता है लेकिन किसी फ़ाइल में ऑब्जेक्ट्स लिखना या तो अभी तक समर्थित नहीं है या मैं एक नहीं ढूंढ पा रहा था ... – aProgrammer

+0

प्रिय डाउनवॉटर ... टिप्पणी करने की हिम्मत !!! – aProgrammer

2

ऐसा लगता है कि यदि आप जेडीबीसी सादे टेक्स्ट ड्राइवर का उपयोग करते हैं तो यह तकनीकी रूप से संभव हो सकता है; हालांकि मैंने कोई ओपनसोर्स नहीं देखा है जो लेखन पहुंच प्रदान करता है; Sourceforge पर जो मैंने पाया वह केवल पढ़ने के लिए है।

+0

एशपूल भी है, जो एक्सएमएल फाइलों का उपयोग करता है: http://wiki.robrohan.com/Ashpool.html – greyfairer

0

मैं exactaly अपनी जरूरत को पता नहीं है, लेकिन शायद यह नीचे में से एक है:

1 - अपनी जरूरत सिर्फ एसक्यूएल से दूर चला जाता है, तो आप एक NoSQL डेटाबेस का उपयोग कर सकते हैं।
हाइबरनेट इसे हाइबरनेट ओजीएम (http://www.hibernate.org/subprojects/ogm) के माध्यम से सुपरपोर्ट करता है। कैसंड्रा, मोंगोडीबी, कॉच डीबी, हैडोप जैसे कुछ डीबी हैं ... आपके पास कुछ सुझाव हैं Here

2 - अब, यदि आप डेटाबेस सर्वर का उपयोग नहीं करना चाहते हैं (एक सेवा प्रक्रिया हमेशा चल रही है), तो आप अपाचे डर्बी का उपयोग कर सकते हैं। यह किसी भी अन्य एसक्यूएल की तरह डीबी है, लेकिन किसी सर्वर की आवश्यकता नहीं है। यह डेटा रखने के लिए एकवचन फ़ाइल का उपयोग करता है। आप आसानी से अपने प्रोग्राम के साथ सभी डेटाबेस परिवहन कर सकते हैं।
एक नज़र डालें: http://db.apache.org/derby/

3 - क्या तुम सच में कुछ पाठ सादे फ़ाइल चाहते हैं, आप कर सकते हैं की तरह माइकल Borgwardt कहा। लेकिन मुझे नहीं पता कि इस मामले में हाइबरनेट एक अच्छा विचार होगा या नहीं।

0

H2 और HyperSQL दोनों एम्बेडेड मोड (एक अलग सर्वर के बजाय आपके JVM के अंदर चल रहा है) का समर्थन करते हैं और स्थानीय फ़ाइल में सहेजते हैं; ये अभी भी SQL डेटाबेस हैं, लेकिन हाइबरनेट के साथ कई अन्य विकल्प नहीं हैं।

2

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

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

पूछने का सही सवाल यह है: क्या किसी को embedded Java SQL database पता है, जिसे आप जावा के भीतर से शुरू कर सकते हैं?

  • HyperSQL: उन के बहुत सारे, इस विषय में उल्लेख कर रहे हैं एक एसक्यूएल स्पष्ट पाठ फ़ाइल में परिणाम संग्रहीत करता है, आसानी से किसी भी अन्य डेटाबेस में आयात
  • एच 2: बाइनरी फ़ाइलें, कम JAR फ़ाइल आकार
  • का उपयोग करता है
  • डर्बी: एक XML संरचित फ़ाइल

मैं छोटे डेटा के लिए एक परियोजना पर HyperSQL का इस्तेमाल किया है में डेटा को और विशाल डाटाबेस के साथ एक परियोजना के लिए अपाचे डर्बी (2Gb और अधिक: बाइनरी फ़ाइलें

  • Ashpool का उपयोग करता है)। अपाचे डर्बी इन विशाल डेटाबेस पर बेहतर प्रदर्शन करता है।

  • 0

    ठीक है, चूंकि सवाल अभी भी खोला गया है और ओपी ने कहा कि वह नए दृष्टिकोण/सुझावों के लिए खोला गया है, यहां मेरा (थोड़ा देर हो चुकी है लेकिन ठीक है)।

    क्या आप Prevayler जानते हैं? यह एक जावा प्रचलन कार्यान्वयन है जो आपके सभी व्यावसायिक ऑब्जेक्ट्स को रैम और मैंटन स्नैपशॉट्स/चेंजलॉग में फाइल सिस्टम में रखता है, इस तरह यह बेहद तेज़ और भरोसेमंद है, क्योंकि यदि कोई दुर्घटना हो रही है, तो यह इसकी आखिरी स्थिति को पुनर्स्थापित कर देगी और प्रत्येक बदलाव को दोबारा लागू करेगी यह।

    इसके अलावा, यह आपके ऐप में सेटअप और चलाने में वास्तव में आसान है।

    +0

    वास्तव में दिलचस्प धन्यवाद लगता है: डी – Corvusoft

    संबंधित मुद्दे