2011-05-15 4 views
5

मैं लाखों एक्सएमएल फाइलों को स्टोर और पुनर्प्राप्त करने का एक आसान तरीका ढूंढ रहा हूं। वर्तमान में सब कुछ फाइल सिस्टम में किया जाता है, जिसमें कुछ प्रदर्शन समस्याएं होती हैं।बिटकस्क सरल और उच्च प्रदर्शन फ़ाइल स्टोर के लिए ठीक है?

हमारी आवश्यकताएँ हैं:

  1. एक बैच-प्रक्रिया में एक्सएमएल-फ़ाइलों के लाखों लोगों को स्टोर करने की क्षमता। एक्सएमएल फाइलें कुछ मेग्स तक बड़ी हो सकती हैं, जिनमें से अधिकांश 100 केबी-रेंज में हैं।
  2. आईडी से बहुत तेजी से यादृच्छिक देखने (जैसे दस्तावेज़ URL)
  3. सुलभ दोनों जावा और पर्ल द्वारा पर सबसे महत्वपूर्ण लिनक्स Distros
  4. उपलब्ध और Windows

मैं था कई NoSQL पर एक नजर है -Platforms (जैसे CouchDB, Riak और अन्य), और जब उन प्रणालियों बहुत अच्छी लग रही है, वे लगभग overkill beeing की तरह लग:

  1. नहीं क्लस्टरिंग आवश्यक
  2. नहीं डेमॉन ("सेवा") की आवश्यकता
  3. कोई चतुर खोज की कार्यक्षमता की आवश्यकता

करने के बाद Riak में गहरी delved, मैं Bitcask (intro देखें) है, जो है कि मैं वास्तव में क्या चाहते हैं लगता है मिल गया है। परिचय में वर्णित मूल बातें वास्तव में दिलचस्प हैं। लेकिन दुर्भाग्य से वहाँ जावा के माध्यम से एक bitcask रेपो उपयोग करने के लिए किसी भी तरह है (या नहीं है?)

सू मेरे सवाल

  • है निम्नलिखित धारणा सही करने पर निर्भर करता: Bitcask मॉडल (केवल संलग्न लिखते हैं, इन-मेमोरी कुंजी प्रबंधन) लाखों दस्तावेज़ों को संग्रहीत/पुनर्प्राप्त करने का सही तरीका है
  • जावा के माध्यम से उपलब्ध बिटकस्क के लिए कोई व्यवहार्य विकल्प हैं? (BerkleyDB दिमाग में आता है ...)
  • (दंगा विशेषज्ञों के लिए) क्या "नग्न" बिटकास्क की तुलना में Riak बहुत अधिक ओवरहेड कार्यान्वयन/प्रबंधन/संसाधनानुसार है?
+1

ओवरकिल के लिए। यदि वे उपयोग करने में आसान हैं, और शायद एम्बेड किए जा सकते हैं, तो वे भी एक अच्छा फिट हो सकते हैं ... और भी कम क्या कर सकते हैं। –

उत्तर

5

मुझे नहीं लगता कि बिटककास्क आपके उपयोग-मामले के लिए अच्छी तरह से काम करने जा रहा है। ऐसा लगता है कि बिटकास्क मॉडल को उन मामलों के लिए डिज़ाइन किया गया है जहां प्रत्येक मान का आकार अपेक्षाकृत छोटा है।

समस्या बिटकस्क की डेटा फ़ाइल विलय प्रक्रिया में है। इसमें सभी लाइव मानों को "पुरानी डेटा फ़ाइल" से "विलयित डेटा फ़ाइल" में कॉपी करना शामिल है। यदि आपके पास 100 केबी के क्षेत्र में लाखों मूल्य हैं, तो यह डेटा प्रतिलिपि की एक पागल राशि है।

+0

इनपुट के लिए धन्यवाद। इसे जांचना होगा – KoW

+0

@kindofwhat - अच्छा विचार। मेरा जवाब पूरी तरह से कागज के पढ़ने पर आधारित है जो बताता है कि यह कैसे काम करता है। लेखकों से पूछना एक और विचार होगा ... –

+0

@StephenC मुझे लगता है कि बिटककास्क मॉडल इस मामले के लिए डिज़ाइन किया गया है कि मूल्य बहुत बड़ा है तो कुंजी। चूंकि बिटककास्क हैशटेबल में सभी कुंजी डाल देगा, और हैशटेबल स्मृति में रखा गया है। इसलिए यदि मान अपेक्षाकृत छोटा है, तो आपके पास बहुत सारी चाबियाँ हो सकती हैं, और आपके पास पूरी कुंजी को स्टोर करने के लिए पर्याप्त स्मृति नहीं है। जैसा कि आपने कहा था, बिटकास्क में कॉम्पैक्ट ऑपरेशन है। डिस्क स्पेस और एम्पलीफिकेशन लिखने के बीच संतुलन है। यदि आप लिखने के एम्पलीफिकेशन से डरते हैं, तो आपको कॉम्पैक्ट की आवश्यकता नहीं है या जब आपको इसकी ज़रूरत होती है तो आप कॉम्पैक्ट कर सकते हैं। और उसके उपयोग के मामले में, मुझे लगता है कि एक्सएमएल डेटा बदलना शायद ही कभी ऑपरेशन है। – baotiao

4

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

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

मुझे जावा संस्करण/रैपर की स्थिति पर यकीन नहीं है।

+0

बिटकास्क एपीआई के "मूल" जावा [कार्यान्वयन] (https://github.com/krestenkrab/bitcask-java) प्रतीत होता है। विलय अभी तक लागू नहीं हुआ है, हालांकि इस कार्यान्वयन के साथ इस मामले का परीक्षण करना बहुत मुश्किल है। – KoW

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