2016-12-12 6 views
6

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

बेवकूफ दृष्टिकोण इन फ़ाइलों को दोबारा पढ़ना होगा और प्रत्येक के लिए आवश्यक परिवर्तन करना होगा अनुरोध, तो वेब अनुप्रयोग पूरी तरह से स्टेटलेस है। लेकिन मैं विलंबता के बारे में चिंतित हूं।

एक और दृष्टिकोण एक सर्वर (gen_server व्यवहार को लागू करने) कि स्टार्टअप पर इन विचारों को तैयार करता है और इन-स्मृति उन्हें संग्रहीत करता LoopData के रूप में, फिर वे दृश्य देता है के रूप में वेब श्रमिकों के लिए आवश्यक बनाने के लिए किया जाएगा। लेकिन यह समरूपता को कम करता है, क्योंकि यह सर्वर एक समय में एक अनुरोध को संसाधित करता है।

क्या एरलांग में एक डिज़ाइन पैटर्न है जो स्टार्टअप पर कुछ महंगी प्रारंभिकता का समर्थन करता है, और फिर भी प्रारंभिक डेटा तक समवर्ती पहुंच की अनुमति देता है? (कुंजी जा रहा है कि इस डेटा अपरिवर्तनीय है, इसलिए मैं पारस्परिक अपवर्जन के बारे में चिंतित नहीं हूँ।)

+2

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

उत्तर

3

आप एक या अधिक ईटीएस तालिकाओं का उपयोग कर सकते हैं अपने डेटा रखने के लिए।

अपने प्रारंभिक चरण में तालिकाएं तैयार करें, फिर प्रत्येक प्रक्रिया को इससे पढ़ा जाए।

आप सारणी प्रारंभिक और तालिकाओं से मॉड्यूल में पढ़ सकते हैं, यह सुनिश्चित करने के लिए कि आप बाद में कार्यान्वयन स्विच कर सकते हैं (जैसे मैनेशिया या बाद में कुछ और)।

ध्यान दें कि ईटीएस टेबल स्मृति में (डिफ़ॉल्ट रूप से) हैं, और यदि आपको अधिक जटिल प्रश्नों की आवश्यकता है, तो मैनेशिया है।

2

1.generate xx.csv

2.complie xx.erl xx.erl करने के लिए

xx.beam करने के लिए

3.run erl

4. request(From, SomeKey) -> spawn(fun() -> Reply = xx:get(SomeKey), to_reply(From, Reply) end).

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