2013-06-04 4 views
5

मेरे पास एक सी एप्लिकेशन है जो पूरे दिन एक केडीबी मेमोरी टेबल पर डेटा स्ट्रीम करता है, अंत में मेरे सर्वर रैम के आकार को बढ़ा देता है। अंततः लक्ष्य डिस्क पर डेटा स्टोर करना है, इसलिए मैंने धीरे-धीरे डेटा स्थानांतरित करने के लिए टाइमर विभाजन फ़ंक्शन चलाने का निर्णय लिया। मैं इस कोड के साथ आया:kdb में रीयल-टाइम में तालिका को सही तरीके से कैसे विभाजित करें?

part_timer : { [] 
    (`$db) upsert .Q.en[`$sym_path] select [20000] ts,exch,ticker,side,price,qty,bid,ask from md; 
    delete from `md where i<20000 
} 

.z.ts: part_timer 
.z.zd: 17 2 6i 
\t 1000 

क्या रीयल-टाइम में स्ट्रीमिंग डेटा को विभाजित करने का यह सही तरीका है? आप यह कोड कैसे लिखेंगे? मैं हटाए गए कथन के बारे में चिंतित हूं कि चयन के साथ सिंक्रनाइज़ नहीं किया जा रहा है।

उत्तर

3

हालांकि आपकी समस्या का कोई स्पष्ट समाधान नहीं है। W.q here पर एक नज़र डालें। यह परंपरागत आरडीबी के लिए केवल एक विकल्प है। यह अनुरोधों को बफर करता है और प्रत्येक MAXROWS रिकॉर्ड डेटा को डिस्क लिखता है।

1

दिन के अंत में (यानी आप की उम्मीद नहीं है डेटा संलग्न किया जा करने के लिए), अपने ग कार्यक्रम से आप कॉल कर सकते हैं:

2013.01.01

.Q.dpft[`:/path/to/location;2013.01.01;`sym;`tableName]; 

साफ करने के लिए एक स्थान के लिए लिखें तालिका

delete from `tableName 

साफ अप कुछ स्मृति

.Q.gc peach til system"s" 

बेशक यह माना जाता है कि आपके पास समय/sym कॉलम हैं, और आप तिथि के अनुसार splay करना चाहते हैं। अन्यथा

`:/path/to/location/tableName/ set tableName 

splay।

भी संलग्न कर सकते हैं यदि आप चाहें तो (उदाहरण के लिए मनुष्यों के लिए क्यू के आईओ अध्याय देखें)

+0

.Q कॉल के लिए धन्यवाद, मैं उन्हें अपनी स्क्रिप्ट में जोड़ दूंगा। मैं डेटा स्टोर करने के लिए दिन के अंत का इंतजार नहीं कर सकता, मैंने इस सवाल में बताया कि स्मृति तालिका हमारी स्थापित रैम को बढ़ा देगी, इसलिए मैं धीरे-धीरे डिस्क पर स्टोर करना चाहता हूं। –

+0

आह उसे याद किया; उस मामले में, w.q में शामिल करें जैसा कि किसी ने कहा है –

+0

क्या यह उपयोग करना संभव है .Q।पंक्तियों को जोड़ने के लिए डीपीएफटी [] केडीबी के लिए मुश्किल लगता है। यदि नहीं, तो मैं अनुक्रमिक रूप से प्रतीकों को संग्रहीत करने के लिए दिन के अंत में प्रभावी रूप से डीबी को पुनर्गठित कैसे कर सकता हूं? –

2

ऊपर टिप्पणी के लिए कहा में:

यदि नहीं, तो मैं कैसे में प्रभावी रूप से डाटाबेस पुनर्निर्माण कर सकते हैं प्रतीकों को क्रमशः स्टोर करने के लिए दिन का अंत?

मुझे पता है कि यह उत्तर थोड़ा विलंबित है, लेकिन यह किसी और की मदद कर सकता है जो एक ही काम करने की कोशिश कर रहा है।

भागो डिस्क पर डेटा को सॉर्ट करने (यह, राम में खींच छँटाई और उसके बाद डिस्क पर लिखने की तुलना में धीमी है) के बाद:

 par:.Q.par[PATH;.z.D;TABLE]; 
    par xasc `sym; 
    @[par;`sym;`p#]; 

कहाँ:

PATH: `:path/on/disk/to/db/root; 

एकल फाइल के लिए टेबल:

TABLE: `tableName; 

splayed तालिकाओं के लिए:

TABLE: `$"tablename/" 
+0

यह उत्तर मूल प्रश्न से संबंधित नहीं है। चूंकि ऐसे मामलों को आमतौर पर हटा दिया जाता है, इसलिए टिप्पणी के रूप में इसका सारांश जोड़ने पर विचार करें। – dkar

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