से आकार के साथ डेटा के साथ डेटा के साथ व्यवहार करने वाले PyTables मैं समझने की कोशिश कर रहा हूं कि PyTables डेटा का प्रबंधन कैसे करता है जो आकार स्मृति आकार से अधिक है।मेमोरी
# Nodes referenced by a variable are kept in `_aliveNodes`.
# When they are no longer referenced, they move themselves
# to `_deadNodes`, where they are kept until they are referenced again
# or they are preempted from it by other unreferenced nodes.
इसके अलावा उपयोगी टिप्पणी _getNode विधि के अंदर पाया जा सकता है: यहाँ PyTables (link to GitHub) के कोड में टिप्पणी है।
ऐसा लगता है जैसे पीईटीबल्स के पास बहुत ही स्मार्ट आईओ बफरिंग सिस्टम है, जैसा कि मैं समझता हूं, उपयोगकर्ता द्वारा संदर्भित डेटा को "जीवित नोड्स" के रूप में संदर्भित करता है, पहले और वर्तमान में बिना संदर्भित डेटा को "मृतक" के रूप में संदर्भित करता है, जब आवश्यक हो तो इसे "पुनर्जीवित" , और डिस्क से डेटा पढ़ता है यदि अनुरोध किया गया कुंजी मृत या जीवित दोनों श्रेणियों में मौजूद नहीं है।
मुझे कुछ विशेषताओं की आवश्यकता है कि डेटा के साथ बड़े पैमाने पर उपलब्ध स्मृति के साथ काम करते समय वास्तव में पाइटेबल्स कैसे स्थितियों को संभालते हैं। मेरे विशिष्ट प्रश्न:
- कैसे मृत नोड/जिंदा नोड सिस्टम काम कर रहा है (सामान्य तस्वीर)?
- जीवित नोड्स/डेड नोड्स के बीच क्या महत्वपूर्ण अंतर है, जबकि वे दोनों सही ढंग से राम में संग्रहीत डेटा का प्रतिनिधित्व करते हैं?
- बफरिंग के लिए रैम की सीमा मैन्युअल रूप से समायोजित की जा सकती है? टिप्पणी के नीचे, कोड है जो
params['NODE_CACHE_SLOTS']
से एक मान पढ़ता है। क्या इसे किसी उपयोगकर्ता द्वारा निर्दिष्ट किया जा सकता है? उदाहरण के लिए यदि मैं अन्य अनुप्रयोगों के लिए कुछ रैम छोड़ना चाहता हूं जिन्हें स्मृति की भी आवश्यकता है? - डेटा की बड़ी मात्रा के साथ काम करते समय PyTables क्रैश या महत्वपूर्ण रूप से मंदी के दौरान स्थितियों में क्या समस्या हो सकती है? मेरे मामले में 100 गुणा से स्मृति से अधिक हो सकता है, ऐसी परिस्थितियों में आम नुकसान क्या हैं?
- आकार, संरचना की संरचना के अर्थ में पीईटीबल्स का उपयोग, और सर्वोत्तम प्रदर्शन प्राप्त करने के लिए 'सही' के रूप में माना जाने वाला डेटा के साथ जोड़-विमर्श?
- Docs suggests प्रत्येक मूल
.append()
चक्र के बाद.flush()
का उपयोग करें। वास्तव में यह चक्र कितना समय हो सकता है? मैं SQLite और PyTables की तुलना में थोड़ा बेंचमार्क कर रहा हूं, जिसमें वे बड़ी सीएसवी फाइलों से कुंजी-मूल्य जोड़े के साथ एक विशाल तालिका बनाने में कैसे संभाल सकते हैं। और जब मैं.flush()
का उपयोग करता हूं, मुख्य चक्र में कम बार, पीईटीबल्स को भारी गति मिलती है। तो - क्या यह सही है,.append()
डेटा के अपेक्षाकृत बड़े हिस्से, और फिर.flush()
का उपयोग करें?
आप अपनी उपलब्ध रैम 100x की स्मृति में सामग्री को स्टोर नहीं कर सकते हैं। हालांकि, PyTables आपको डेटा में डेटा तक पहुंचने या स्मृति-कुशल तरीके से (कभी-कभी) में अपने डेटा में फ़ंक्शंस लागू करने में सहायता कर सकता है। आप अपने डेटा के साथ क्या करने की कोशिश कर रहे हैं? – seandavi