हमारे अपने एपीआई के लिए इष्टतम डेटा संरचना


10

मैं स्टैक एक्सचेंज नेटवर्क के लिए एक एमएसीएस प्रमुख मोड लिखने के शुरुआती चरणों में हूं ; यदि आप नियमित रूप से 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> ...)

चिंताओं:

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

क्या आपके पास कोई अन्य सुझाव है कि बेहतर संरचना कैसी दिख सकती है?


मैं इसे + 1 कर रहा हूँ क्योंकि मैं वास्तव में इस विधा को चाहता हूँ
डैनियल ग्रैज़र

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

मुझे बस एक ब्राउज़र प्लगइन स्थापित करने में बहुत खुशी हुई है जो मुझे टेक्स्ट बॉक्स सामग्री को भरने के लिए Emacs का उपयोग करने की अनुमति देता है। आप Emacs विकी मार्कअप को समझने और स्वरूपित पाठ प्रदर्शित करने जा रहे हैं?
केविन क्लाइन

@kevincline नहीं, विचार यह है कि यह केवल उपयोगितावादी कार्य करेगा: स्थानीय प्रश्न अभिलेखीय; एडवांस्ड कोड एडिटिंग (सही प्रमुख मोड की ओर काटते हुए, इसके समान org); <!-- language: blah>जहां आवश्यक हो सम्मिलित करना (उस मोड के आधार पर कोड संपादन किया गया था); इस तरह के सामान। अधिक जानकारी के लिए GitHub पर README देखें, और लगता है सबसे स्वागत सुविधाओं का सुझाव करने के लिए। जितना अधिक मैं इसके बारे में हाथ से पहले जानता हूं, उतना ही बेहतर इसे डिजाइन किया जा सकता है। संपादित करने के लिए नहीं emacs keybindings का उल्लेख;)
शॉन एल्ड्रेड

जवाबों:


1

Emacs लिस्प डेटा प्रोसेसिंग के लिए अनुकूलित नहीं है; आपको केवल प्रस्तुति के लिए इंजन और Emacs के लिए एक सामान्य लिस्प का उपयोग करना फायदेमंद हो सकता है।

यहां तक ​​कि अगर आप Emacs Lisp के साथ छड़ी करने का निर्णय लेते हैं, तो मैं सुझाव देता हूं कि आप eieioसूचियों के बजाय संरचित डेटा ( ) का उपयोग करें , और alists के बजाय हैश टेबल।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.