2009-01-03 6 views
11

के लिए डिस्क समर्थित शब्दकोश/कैश मैं डेटा की बड़ी मात्रा में कैशिंग के लिए समाधान में एक बूंद की तलाश में हूं। लेकिन अलग-अलग भाषाओं के लिएसी #

संबंधित प्रश्नों:

अलग मामले में बंद प्रश्न:

मुझे दृढ़ता, लेनदेन, धागा सुरक्षा या पसंद की आवश्यकता नहीं है (या कुछ भी चाहते हैं जो किसी सूची <> या शब्दकोश <> से अधिक उपयोग करने के लिए जटिल नहीं है।

अगर मैं कोड लिखने के लिए है, मैं तो बस सब कुछ बंद अस्थायी निर्देशिका में फ़ाइलों के रूप में बचा सकते हैं:

string Get(int i) 
{ 
    File.ReadAllText(Path.Combine(root,i.ToString()); 
} 

सूचकांक में मेरी मामलों में एक int हो जाएगा (और वे लगातार या इतने पास होना चाहिए) और डेटा string होगा, इसलिए मैं POD दोनों का इलाज करने से दूर हो सकता हूं और अल्ट्रा-लाइट पर जाउंगा और ठीक उसी तरह करूँगा।

उपयोग यह है कि मेरे पास 6kMB कुल 3k फ़ाइलों (फ़ाइल # 1 से # 3000 में) का अनुक्रम है और अनुक्रम में प्रत्येक चरण के लिए एक अंतर करने की आवश्यकता है। मैं उम्मीद करता हूं कि कुल मिलाकर थोड़ा और थोड़ा और मैं इसे स्मृति में रखना नहीं चाहता हूं (बड़े मामले ऐसे आ सकते हैं जहां मैं बस नहीं कर सकता)।


कई लोगों ने मेरी समस्या के लिए विभिन्न समाधान सुझाए हैं। हालांकि मेरे छोटे आला पर कोई भी लक्षित नहीं लगता है। जिन कारणों से मैं डिस्क समर्थित कैशिंग पर देख रहा हूं वह इसलिए है क्योंकि मुझे उम्मीद है कि मेरा वर्तमान उपयोग मेरे उपलब्ध पता स्थान के 1/3 से 1/2 तक उपयोग करेगा। मुझे चिंता है कि बड़े मामले केवल अंतरिक्ष से बाहर चले जाएंगे। मैं चलने, दृढ़ता या प्रतिकृति के बारे में चिंतित नहीं हूं। जो मैं खोज रहा हूं वह न्यूनतम कोड का उपयोग करके न्यूनतम समाधान है, न्यूनतम उपयोग पैर प्रिंट, मेमोरी ओवरहेड में न्यूनतम और न्यूनतम जटिलता।

मुझे लगता है कि मैं अत्यधिक आशावादी हूं।

+0

नहीं क्यों फाइल सिस्टम? यही वह है जो ... – RedFilter

+0

के लिए डिज़ाइन किया गया है यदि कोई मुझे पहले से लिखे गए कुछ बेहतर तरीके से इंगित नहीं कर सकता है। – BCS

+0

क्या डिस्क-आधारित कैश कैशिंग तंत्र के पूरे उद्देश्य को पराजित नहीं करता है? –

उत्तर

0

आप डिस्क आधारित कैश समाधान के साथ MS application block उपयोग कर सकते हैं

0

NCache here भी में देखने का प्रयास।

मैं इस कंपनी से संबद्ध नहीं हूं। मैंने अभी अपने मुफ्त एक्सप्रेस संस्करण को डाउनलोड और परीक्षण किया है।

2

अस्वीकरण - मैं के बारे में एक उत्पाद है कि मैं में शामिल कर रहा हूँ पर आप बात करने के लिए कर रहा हूँ

मैं अभी भी चीजों की वेब साइट की ओर काम कर रहा हूँ, इसलिए वहाँ की जानकारी का एक बहुत कुछ नहीं है, लेकिन Serial Killer होगा। इसके लिए एक अच्छा फिट हो। मेरे पास ऐसे उदाहरण हैं जो .NET serialization (उदाहरणों की आपूर्ति कर सकते हैं) का उपयोग करते हैं, इसलिए .NET serializable ऑब्जेक्ट्स के लिए एक सतत नक्शा कैश लिखना तुच्छ होगा।

पर्याप्त लापरवाह आत्म प्रचार - यदि रुचि है, तो वेबसाइट पर संपर्क लिंक का उपयोग करें।

+0

+1 के लिए शिकार कर रहा हूं लेकिन मैं अल्ट्रा-लाइट समाधान के लिए और अधिक देख रहा हूं (आदर्श होगा जहां कुंजी और मान दोनों पीओडी हैं और बाइनरी डेटा के रूप में संग्रहीत हैं ब्लॉक) – BCS

+0

सीरियलकिल्लर बहुत हल्का प्रकाश है - मैं उस कारण से इसे खारिज करने के लिए नफरत करता हूं! इंटरफ़ेस मूल रूप से एक कुंजी (सिस्टम जेनरेट) से एक बाइनरी स्ट्रीम में मैपिंग है। –

+0

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

4

जो आप वास्तव में चाहते हैं वह बी-ट्री है। वह प्राथमिक डेटा संरचना है जो डेटाबेस का उपयोग करता है। यह आपको आवश्यकतानुसार डिस्क से डेटा संरचना के हिस्सों को कुशलता से स्वैप करने में सक्षम बनाने के लिए डिज़ाइन किया गया है।

मुझे सी # के लिए व्यापक रूप से उपयोग किए जाने वाले, उच्च गुणवत्ता वाले स्टैंडअलोन बी-ट्री कार्यान्वयन के बारे में पता नहीं है।

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

+0

मुझे ओवरहेड पसंद नहीं है। मेरे संपादन देखें लेकिन मैं मेमोरी सरणी में एक सिंगल से दूर हो सकता हूं और प्रति लोड एक डिस्क पढ़ सकता हूं ताकि बी-ट्री ओवरकिल हो ... मेरे मामले में। – BCS

+0

इन-प्रो-डीबी का उपयोग करने का एक फायदा यह है कि यह आपको पहुंच का आजादी देता है। जब आपको अपने द्वारा संग्रहीत डेटा को बदलने की आवश्यकता होती है, या आपको किस कुंजी को एक्सेस करने की आवश्यकता होती है, तो आपको अपने ऐप –

+0

का एक बड़ा हिस्सा फिर से लिखने की आवश्यकता नहीं है, हालांकि, अगर आपको वास्तव में लगता है कि आपको जो सामान करना है डेटा इतना आसान है, तो मुझे लगता है कि आप स्क्रैच से कुछ कर सकते हैं जो डिक्शनरी (int, string) का उपयोग करता है, जहां स्ट्रिंग फ़ाइल नाम था, लगभग 2-3 घंटे काम .... –

0

मैंने आंशिक रूप से .NET पर EhCache जावा एप्लिकेशन को पॉप्रेट किया है वितरित कैशिंग अभी तक लागू नहीं किया गया है, लेकिन एक नोड पर, सभी मूल यूनिटटेस्ट पास हो जाते हैं। पूर्ण OpenSource:

http://sourceforge.net/projects/thecache/

यदि आपको आवश्यकता मैं एक द्विआधारी ड्रॉप बना सकते हैं (केवल sourcecode अब उपलब्ध है)

+0

एक साफ दिखता है परियोजना। ओटीओएच यह मेरे लिए ओवरकिल की तरह दिखता है। – BCS

0

मैं चाहता हूँ एम्बेडेड डीबी मार्ग (SQLite, Firebird) ले, लेकिन यहाँ हैं कुछ अन्य विकल्प:

  • Berkeley DB: अपने मानक SQL DB नहीं एम्बेडेड है, लेकिन काम के इस प्रकार के लिए सही विकल्प हो रहा है, हालांकि not easily usable from .net
  • db4o: एक ओओडीबी, बहुत सरल इंटरफ़ेस
0

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

http://msdn.microsoft.com/en-us/library/cc309502.aspx

और विशेष रूप से, आप एक नया समर्थन दुकान बनानी होगी (यदि एक है कि डिस्क पर बनी रहती है वहाँ नहीं है) चाहते हैं:

यहाँ कैशिंग आवेदन ब्लॉक के लिए लिंक है

http://msdn.microsoft.com/en-us/library/cc309121.aspx

0

प्रश्न के आपके हालिया संपादनों को देखते हुए, मेरा सुझाव है कि आप अपने प्रश्न में उल्लिखित समाधान को लागू करें क्योंकि आप में ऐसे बेवकूफ़ समाधान को लपेटने की संभावना नहीं है आपके लिए पुन: उपयोग करने के लिए लाइब्रेरी।

+0

अच्छा मौका मैं करूंगा। अगर मैं करता हूं, तो मैं कोड पोस्ट करूंगा। – BCS

2

यह बहुत मेरे सवाल

Looking for a simple standalone persistant dictionary implementation in C#

मैं एक पुस्तकालय नहीं लगता कि वास्तव में फिट बैठता है कि क्या आप चाहते हैं मौजूद है, हो सकता है GitHub पर एक नई परियोजना के लिए अपने समय है के समान है।

+0

जोड़ा गया लिंक। आप एक लिंक को दूसरी तरह कैसे जोड़ते हैं? – BCS

+0

ओटीओएच प्रेरणा अलग है। आप दृढ़ता की तलाश में थे, मैं स्मृति की बजाय डिस्क पर सामान स्टोर करना चाहता हूं। बड़े ओवरलैप, लेकिन काफी समान नहीं है। – BCS

+0

कोई चिंता नहीं, मैंने अपनी पोस्ट –

1

यहाँ .net के लिए एक बी ट्री दिया गया है: http://bplusdotnet.sourceforge.net/

+0

से एक लिंक जोड़ा एक दिलचस्प परियोजना है लेकिन अभी भी मैं जितना चाहता हूं उससे बहुत भारी है। – BCS