दुर्भाग्य से बड़े डेटा सेट के साथ काम करते समय संरचना को क्रमबद्ध और deserialize करने में हमेशा समय लगेगा। DataTable
s विशेष रूप से काफी जटिल वस्तुएं हैं, क्योंकि उनमें पंक्तियाँ और स्तंभ होते हैं जिनमें अक्सर बहुत अधिक मेटा डेटा जुड़ा होता है - भले ही यह एक मूल तालिका प्रतीत होती हो।
DataTable
बनाम List<POCO>
:
विचार करें कि क्या आपको वास्तव में DataTable
. के रूप में क्रमबद्ध करने की आवश्यकता है . क्या आप एक आसान POCO बना सकते हैं और एक List<YourRecord>
. को क्रमबद्ध कर सकते हैं ? दूसरे शब्दों में, यदि आपको फ़ील्ड और कॉलम पर अतिरिक्त विशेषताओं की आवश्यकता नहीं है और आप एक सरल प्रारूप में क्रमबद्ध कर सकते हैं, तो यह संभवतः तेज़ है, और कैश में अधिक स्थान कुशल है; और फिर एक DataTable
. पर पुनर्स्थापित करें यदि आवश्यक हो।
एक अन्य विकल्प DataTable
. को विभाजित करना है छोटे सेटों में, जिन्हें आप क्रमबद्ध करते हैं और छोटे भागों में संग्रहीत करते हैं। आपको यह अधिक प्रदर्शनकारी लग सकता है। आपको इसे बेंचमार्क करने में सक्षम होना चाहिए।
बेंचमार्क:
अंततः डेटा स्रोत को फिर से क्वेरी करने में लगने वाले समय के साथ आपका Redis कैश एक सुधार होना चाहिए। आप शब्द का प्रयोग करते हैं takes too much time
, लेकिन अगर डेटा स्रोत को क्वेरी करने के लिए कैश बनाम 8 सेकंड से प्राप्त करने में 2 सेकंड लगते हैं तो यह एक महत्वपूर्ण बढ़ावा है। लेकिन सुनिश्चित करने का एकमात्र तरीका बेंचमार्क है।
-
अपना परिवेश सेट करें ताकि आप केवल आवश्यक उपकरण चला रहे हों। बेंचमार्क चलाते समय अन्य कार्य न करें, ताकि आप किसी तरह का पक्षपात न करें।
-
किसी
DataTable
को क्रमांकित करने में लगने वाले समय को रिकॉर्ड करें . इस क्रिया को कई बार और औसत रूप से करें।var start = DateTime.Now; // Serialize var duration = DateTime.Now - start;
-
DataTable
के विभिन्न आकारों के साथ प्रयोग करें s और देखें कि क्या आपको एक स्वीकार्य समय मिलता है। -
JSON.NET जैसे भिन्न क्रमांकन पुस्तकालय का प्रयास करें। हालांकि यह सब सर्विसस्टैक रखना अच्छा है, यह आपको यह निर्धारित करने में मदद कर सकता है कि क्या यह सर्विसस्टैक की कमी है। टेक्स्ट या बड़े डेटासेट के साथ सिर्फ एक समस्या है।
-
अक्रमांकन के लिए प्रक्रिया को दोहराएं।
स्मृति:
यदि आप बड़े डेटासेट के साथ काम कर रहे हैं, तो क्या आपके एप्लिकेशन और कैशे दोनों में पर्याप्त मेमोरी है? आपके आवेदन में स्मृति एक बाधा हो सकती है; संचालन करते समय आपको अपने सिस्टम की गतिविधि मॉनिटर को देखना चाहिए, और यह सुनिश्चित करना चाहिए कि आपकी मेमोरी खत्म नहीं हो रही है और आपका सिस्टम पेजिंग कर रहा है। यदि आप ऐसा होते हुए पाते हैं, तो या तो रैम बढ़ाने पर विचार करें, या डेटाटेबल को पहले बताए गए छोटे डेटासेट में विभाजित करें।
विलंबता:
यदि आप किसी नेटवर्क पर Redis सर्वर से कनेक्ट कर रहे हैं, और उसी मशीन पर नहीं, तो क्या आपने नेटवर्क की विलंबता की जाँच की है? आप अपने एप्लिकेशन सर्वर और कैश सर्वर के बीच अपना पिंग करना चाह सकते हैं और सुनिश्चित कर सकते हैं कि आपके पास वास्तव में कम पिंग है। विशेष रूप से यदि आप पाते हैं कि साधारण वस्तुओं को कैश करना धीमा है।
रेडिस?
यदि आप पाते हैं कि कैशे और पुनर्स्थापित करने के लिए समय में सुधार करने का कोई तरीका नहीं है, तो शायद रेडिस का उपयोग करना एक अच्छा फिट नहीं है। शायद static DataTable
. का उपयोग कर रहे हैं एप्लिकेशन मेमोरी के भीतर अधिक उपयुक्त होगा। दूसरे शब्दों में, कैश को एप्लिकेशन मेमोरी में रखें और फिर चिंता करने के लिए कोई क्रमांकन और अक्रमांकन नहीं है। बेशक आपको यह सुनिश्चित करने के लिए सावधान रहने की आवश्यकता हो सकती है कि ऐसा करने के लिए आपके आवेदन में पर्याप्त मेमोरी उपलब्ध है। हालांकि अगर आपको यह विकल्प चुनना पड़े तो मुझे आश्चर्य होगा ।
सारांश:
अपने डेटासेट या उस सेवा के ज्ञान को देखे बिना जिसे आप बना रहे हैं, यह अंततः केवल सामान्य सलाह है कि आपकी समस्या के कारण को कैसे कम किया जाए। मुख्य सलाह यह है कि DataTable
का उपयोग न करें यदि एक सरल संरचना काम करेगी, और किसी भी अड़चन को निर्धारित करने के लिए प्रत्येक ऑपरेशन को बेंचमार्क करेगी।
मुझे आशा है कि यह मदद करता है।