में डेटा स्टोर से पूछताछ करने का सबसे प्रभावी तरीका मेरे पास लगभग 150,000 इकाइयों के साथ एक डेटा स्टोर है। जब मैं फ़िल्टर का उपयोग कर स्टोर से पूछता हूं, तो मेरे प्रश्न वास्तव में धीमे होते हैं। मेरी संरचना पूरी तरह से फ्लैट है, यानी हर इकाई एक-दूसरे का भाई है।ऐप इंजन
1: फिल्टर के बजाय जीक्यूएल का उपयोग करना बेहतर है?
2: क्या यह डेटा स्टोर के लिए सबसे अच्छा उपयोग-मामला नहीं है, और क्या मुझे इसके बजाय SQL डेटाबेस का उपयोग करना चाहिए?
यहाँ मेरी कोड का एक उदाहरण है:
// Look for a buy opportunity
dateFilter = new FilterPredicate("date", FilterOperator.EQUAL, dt);
scoreFilter = new FilterPredicate("score", FilterOperator.LESS_THAN_OR_EQUAL, 10.0);
safetyFilter = new FilterPredicate("score", FilterOperator.GREATER_THAN_OR_EQUAL, -1.0);
mainFilter = CompositeFilterOperator.and(dateFilter,scoreFilter,safetyFilter);
q = new Query("StockEntity",stockKey).setFilter(mainFilter);
q.addSort("score", Query.SortDirection.ASCENDING);
stocks = datastore.prepare(q).asList(FetchOptions.Builder.withLimit(availableSlots));
कुछ और जानकारी:
150,000ish रिकॉर्ड, 500 शेयरों के बीच बांटा, शेयर प्रति इतना करीब 300 रिकॉर्ड, में प्रत्येक दिन के लिए एक एक तिथि सीमा।
उपर्युक्त की तरह क्वेरी, जहां एक विशिष्ट तिथि पारित की जाती है, और 500 स्टॉक प्रभावी रूप से 'स्कोर' के आधार पर फ़िल्टर किए जाते हैं, रिकॉर्ड के लिए वांछित रिकॉर्ड की संख्या 10 से 20 सेकंड के बीच होती है मेरी विकास मशीन पर पूरा करने के लिए।
अभी तक उत्पादन में दबाव डालने की कोशिश नहीं की है, लेकिन मुझे लगता है कि मैं इसे अगले कोशिश करूँगा - मुझे लगा कि इसमें कोई बड़ा अंतर नहीं होगा। मेरी देव मशीन काफी उच्च spec iMac है।
जीक्यूएल और फ़िल्टर एक ही काम करते हैं। आपको अपने डेटा को देखने और अपने प्रश्नों के लिए इसे अनुकूलित करने के तरीकों की तलाश करने की आवश्यकता है। –
डेटास्टोर जैसे वातावरण में कोई कैसे अनुकूलित करता है? स्टॉक टिकर: स्ट्रिंग बंद कीमत: डबल स्कोर: डबल दिनांक: मैं एसक्यूएल/इंडेक्स आदि डाटा वस्तु बहुत सरल है का उपयोग करने के लिए प्रयोग किया जाता रहा हूँ स्ट्रिंग ... और मुझे 150k के बारे में रिकॉर्ड है कि देखने के लिए है उसके जैसा। –
आपको हमें कुछ और जानकारी देने की ज़रूरत है, जैसे कि आप कितने रिकॉर्ड लौट रहे हैं, क्वेरी कितनी बार चलती है, पैरामीटर बदलते हैं। अधिकांश डेटास्टोर ऑप्टिमाइज़ेशन लिखने के समय प्रीप्रोसेसिंग के आसपास घूमते हैं, डेटा को denormalizing, लगातार पूछताछ कैशिंग। इसके चेहरे पर यह क्वेरी तेज होनी चाहिए, लेकिन यदि आप बड़ी संख्या में रिकॉर्ड्स पुनर्प्राप्त करने का प्रयास कर रहे हैं तो आप प्रदर्शन दीवारों को मार देंगे। –