2012-08-14 13 views
5

मैं वास्तव में हल्के वेब प्रोजेक्ट को कार्यान्वित कर रहा हूं, जिसमें केवल एक पृष्ठ है, जो चित्र में डेटा दिखा रहा है। मैं इस चित्र के लिए नियमित रूप से साजिश के रूप में एक वेबसर्वर और d3.js के रूप में Django का उपयोग करता हूं। जैसा कि आप कल्पना कर सकते हैं, केवल कुछ सरल समय श्रृंखलाएं हैं जिन्हें Django सर्वर द्वारा जवाब देना है, इसलिए मैं सोच रहा था कि क्या मैं बस इस चर को राम में रख सकता हूं। मेरा पहला परीक्षण सकारात्मक था, मैं अपने views.py में कुछ इस तरह था:रैम में django vars

X = np.array([123,23,1,32,123,1]) 

@csrf_exempt 
def getGraph(request): 
    global X 
    return HttpResponse(json.dumps(X)) 

सूचना, X एक और समारोह से अद्यतन किया जाता है हर अब और फिर, लेकिन सभी उपयोगकर्ता पहुँच केवल पढ़ने के लिए। क्या मुझे

  1. वैश्विक चर परिभाषित करके सुरक्षा समस्याएं हैं?
  2. सामान्य रूप से असंगतताएं?

मुझे a thread Django में वैश्विक चर पर चर्चा करने के लिए मिला, लेकिन उस स्थिति में, कठिनाई कई लेखन-पहुंच को संभालने का है।

संभावित प्रश्नों का उत्तर देने के लिए मैं डेटाबेस में स्टोर डेटा क्यों नहीं चाहता हूं: मेरे X में जो डेटा मिला है वह पहले से ही एक विशाल दूरस्थ डेटाबेस में संग्रहीत है और इस वेब ऐप को केवल डेटा प्रदर्शित करने की आवश्यकता है।

उत्तर

2

एक चर में इसे संग्रहीत करने में वास्तव में थ्रेडिंग प्रभाव होते हैं (और स्केलेबिलिटी - क्या होगा यदि आपके पास दो Django सर्वर एक ही ऐप चला रहे हों?)। Django समुदाय की सलाह नहीं है!

हालांकि यह Django कैश सिस्टम के लिए एक अच्छा फिट की तरह लगता है। @cache_page के साथ बस अपने getGraph देखें और काम पूरा हो गया है। Memcache का उपयोग करने की कोई आवश्यकता नहीं है, अंतर्निहित मेमोरी-कैश कैश-बैकएंड * ठीक काम करेगा। कैश (वर्षों) पर टाइम-आउट के रूप में बहुत अधिक संख्या रखें।

इस तरह आप HTTP प्रतिक्रिया (JSON) को एक्स के मान को संग्रहीत नहीं कर रहे हैं। लेकिन आपके कोड नमूने से, यह कोई समस्या नहीं है। आप फिर से गणना करने के लिए एक्स की जरूरत है आप JSON फिर से गणना करने के लिए की जरूरत है, और आप फिर से गणना करने के लिए एक्स

https://docs.djangoproject.com/en/dev/topics/cache/?from=olddocs/


1 की आवश्यकता होगी अगर आप JSON फिर से गणना करने के लिए की जरूरत है या बस 'निर्मित मेमोरी बैकएंड', मैं

+0

Django समुदाय के सदस्य के रूप में विरोध नहीं कर सका, मैं जरूरी नहीं कहूंगा कि "नहीं" - मैंने कुछ चीजें खुद को समान ही की हैं। लेकिन कैश बैकएंड के लिए +1, यह इस समस्या को हल करने का एक बेहतर तरीका है। –

+1

@ जो मैंने कोशिश की, और यह सामान्य http अनुरोधों के साथ ठीक काम करता है, लेकिन जब मैं इसे 'AJAX' के माध्यम से कॉल करता हूं तो यह कैश नहीं होता है। मुझे लगता है, Django प्रत्येक एकल 'AJAX' अनुरोध को पहले से अलग होने और' X' की गणना करने के लिए मानता है। इसके साथ कैसे निपटें? लेकिन धन्यवाद, फिर से Django कैश सिस्टम की सिफारिश करने के लिए - यह वैश्विक वर्र्स –

+1

की तुलना में काफी अधिक सुरुचिपूर्ण प्रतीत होता है! मैंने इसे 'निम्न-स्तर कैश API' का उपयोग करके हल किया। यह बिल्कुल सही है। बहुत बहुत धन्यवाद –

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