मैं स्टैक एक्सचेंज नेटवर्क के लिए एक एमएसीएस प्रमुख मोड लिखने के शुरुआती चरणों में हूं ; यदि आप नियमित रूप से Emacs का उपयोग करते हैं, तो इससे आपको अंत में लाभ होगा।
स्टैक एक्सचेंज के एपीआई (प्रति दिन 10000 प्रति आईपी पर कैप्ड) में किए गए कॉल की संख्या को कम करने के लिए और केवल एक आम तौर पर जिम्मेदार नागरिक होने के लिए, मैं नेटवर्क से प्राप्त जानकारी को कैश करना चाहता हूं और इसे मेमोरी में स्टोर करना चाहता हूं, इंतजार कर रहा हूं फिर से पहुँचा जा सकता है। मैं वास्तव में इस जानकारी को संग्रहीत करने के लिए किस डेटा संरचना के रूप में फंस गया हूं।
जाहिर है, यह एक सूची होने जा रही है। हालांकि, किसी भी डेटा संरचना के साथ, चुनाव को यह निर्धारित करना चाहिए कि क्या डेटा संग्रहीत किया जा रहा है और इसे कैसे एक्सेस किया जाएगा। क्या, मैं इस तरह की जानकारी को एक प्रतीक में संग्रहीत करने में सक्षम होना चाहूंगा stack-api/cache
। तो, आगे की हलचल के बिना, stack-api/cache
अंतिम अपडेट के आधार पर सहमति की एक सूची है:
`(<csite> <csite> <csite>)
कहाँ <csite>
होगा
(1362501715 . <site>)
इस बिंदु पर, हमने जो कुछ किया है वह एक साधारण एसोसिएशन सूची को परिभाषित करता है । निश्चित ही, हमें गहराई तक जाना चाहिए ।
प्रत्येक <site>
एपीआई पैरामीटर की एक सूची है (अद्वितीय) एक सूची प्रश्नों के बाद:
`("codereview" <cquestion> <cquestion> <cquestion>)
प्रत्येक <cquestion>
, आपने यह अनुमान लगाया है, उनके अंतिम अद्यतन समय के साथ प्रश्नों की एक सूची:
`(1362501715 <question>) (1362501720 . <question>)
<question>
एक question
संरचना और उत्तर की एक सूची है (फिर से, उनके अंतिम अद्यतन समय के साथ सहमति ):
`(<question-structure> <canswer> <canswer> <canswer>
और `
`(1362501715 . <answer-structure>)
यह डेटा संरचना संभवतः सबसे सटीक रूप से एक पेड़ के रूप में वर्णित है, लेकिन मुझे नहीं पता कि क्या भाषा पर विचार करने का एक बेहतर तरीका है, Emacs Lisp (जो कि उस लिस्प से अलग नहीं है जिसे आप जानते हैं और सभी पर प्यार करते हैं ) । स्पष्ट सहमति अनावश्यक होने की संभावना है, लेकिन यह मेरे मस्तिष्क को इसके चारों ओर लपेटने में मदद करता है। मुझे पूरा यकीन है कि <csite>
उदाहरण के लिए, बस में बदल जाएगा
(<epoch-time> <api-param> <cquestion> <cquestion> ...)
चिंताओं:
- क्या इस तरह की संभावित विशाल संरचना में डेटा संग्रहीत करना सिस्टम के लिए कोई प्रदर्शन व्यापार-बंद है? मैं बाहरी डेटा संग्रहीत करने से बचना चाहूंगा, लेकिन मैंने वह किया है जो मैं नहीं कर सकता था और मुझे नहीं लगता कि डाटासेट पहले स्थान पर (सामान्य उपयोग के लिए) है क्योंकि यह उचित अनुपात में सभी मानव-पठनीय पाठ है। (मैं सूची के प्रमुख समय का उपयोग करके पुराने डेटा को खींचने की योजना बना रहा हूं; प्रत्येक अपने बच्चों से अंतिम अद्यतन समय विरासत में लेता है और पेड़ से नीचे की तरफ। इस लता को किस सीमा तक लगना चाहिए: मैं नहीं हूं। ज़रूर।)
- क्या इस तरह के डेटा को संग्रहीत करने के लिए कोई प्रदर्शन व्यापार-बंद है जो इसका उपयोग करना चाहिए? यही है, संचालन और सूची के आकार से पीड़ित कार्यों को पुनर्प्राप्त करेगा?
क्या आपके पास कोई अन्य सुझाव है कि बेहतर संरचना कैसी दिख सकती है?
org
); <!-- language: blah>
जहां आवश्यक हो सम्मिलित करना (उस मोड के आधार पर कोड संपादन किया गया था); इस तरह के सामान। अधिक जानकारी के लिए GitHub पर README देखें, और लगता है सबसे स्वागत सुविधाओं का सुझाव करने के लिए। जितना अधिक मैं इसके बारे में हाथ से पहले जानता हूं, उतना ही बेहतर इसे डिजाइन किया जा सकता है। संपादित करने के लिए नहीं emacs keybindings का उल्लेख;)