2016-02-17 6 views
5

में एक ग्लोबल चर बनाने के लिए मैं कैसे अमृत में निम्नलिखित कोड है:अमृत मॉड्यूल

def get_trackerid(imei) do 
    client = get_new_client() 
    {:ok, result} = :cqerl.run_query(client, "SELECT * FROM trackers_by_imei where imei = \'#{imei}\';") 
    row = :cqerl.all_rows(result) 
end 

अब, अब कई कार्यों get_trackerid समारोह और हर समारोह में कहा जाता है बुला रहे हैं, डेटाबेस को फोन किया है।

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

मुझे लगता है कि एलिक्सिर में वैश्विक चर की कोई अवधारणा नहीं है, इसलिए यह कोई विकल्प नहीं है, है ना?

उत्तर

4

आपके पास एलिक्सीर के भीतर राज्य को बचाने के लिए कुछ विकल्प हैं।

यदि यह विधि GenServer चला रहे मॉड्यूल का हिस्सा है, तो आप कैश मानों के लिए state पैरामीटर का उपयोग कर सकते हैं।

आप मूल्यों को कैश करने के लिए ets table का भी उपयोग कर सकते हैं। यह GenServer के अंदर और बाहर दोनों काम करेगा।

5

आप जो पूछ रहे हैं उसे "memoization" कहा जाता है। मैं उल्लेख करता हूं कि यदि आप Google की देखभाल करते हैं और देखते हैं कि आप इस विषय पर अधिक पा सकते हैं या नहीं।

यह एक बढ़िया ब्लॉग पोस्टिंग अमृत में एक Memoization तकनीक पर चर्चा कर रहा है: https://web.archive.org/web/20161116091132/http://ineverfinishanyth.in/2014/01/20/memoization-in-elixir

टी एल; डॉ

एक कैश का निर्माण और कैश की जाँच जब आप अपने गणना करता है, तो देखने के लिए करने की कोशिश जवाब पहले से ही है। उस ब्लॉग पोस्टिंग के मामले में वह एक कैश के रूप में एक महत्वपूर्ण मूल्य स्टोर बनाता है लेकिन स्पष्ट रूप से आपको किस प्रकार का कैश बनाना चाहिए, वह उस डेटा पर निर्भर करेगा जो आप कैशिंग कर रहे हैं।

+0

प्रदान किया गया लिंक टूटा हुआ है। – tuned

+1

@ tunedconsulting मैंने वेबपृष्ठ के Google कैश संस्करण को इंगित करने के लिए लिंक बदल दिया है। –

+1

नया लिंक यहां है http://ineverfinishanyth.in/2014/01/20/memoization-in-elixir (: – tuned

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