2012-12-18 5 views
5

का उपयोग करने के लिए एक ऐपइंजिन जावा/जेडीओ डेटास्टोर डाट() को अनुकूलित कैसे कर सकता हूं, मैं ऐप इंजन पर चलने वाले ऐप को ट्यून कर रहा हूं और सबसे बड़ी लागत में से एक डेटा स्टोर पढ़ता है और लिखता है। मैंने देखा है कि लिखने के सबसे बड़े अपराधियों में से एक यह है कि जब हम एक आदेश जारी रखते हैं।मैं कम लिखने

बुनियादी डेटा आदेश कई मदों है - हम दोनों को अलग से संग्रहीत करने और इस तरह से उन्हें संबंधित हैं:

@PersistenceCapable 
public class Order implements Serializable { 

    @Persistent(mappedBy="order") 
    @Element(dependent = "true") 
    private List<Item> orderItems; 

    // other fields too obviously 
} 

@PersistenceCapable 
public class Item implements Serializable { 

    @Persistent(dependent = "true") 
    @JsonIgnore 
    private Order order; 

    // more fields... 

} 

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

AppStats डेटा:

असली = 34ms एपीआई = 1695ms लागत = 6400 billed_ops = [DATASTORE_WRITE: 64]

असली = 42ms एपीआई = 995ms लागत = 3600 billed_ops = [DATASTORE_WRITE: 36]

appstats request info

क्षेत्रों मैं उस के बारे में पता में से कुछ शायद मदद मिलेगी:

  1. कम इंडेक्स - कई ऑर्डर और आइटम गुणों पर इम्प्लांट इंडेक्स है जो मैं एपेंगिन को इंडेक्स नहीं बता सकता, उदाहरण के लिए item.quantity कुछ ऐसा नहीं है जिसे मुझे क्वेरी करने की आवश्यकता है। लेकिन क्या ये सभी लिखने के लिए हैं?
  2. आइटम और ऑर्डर से संबंधित है, ताकि मेरे पास सिर्फ एक इकाई ऑर्डरआईटम हो, रिश्ते की आवश्यकता को हटा दें (लेकिन अतिरिक्त संग्रहण के साथ इसके लिए भुगतान करें)।
  3. स्पष्टीकरण सूचकांक के संदर्भ में, मेरे पास ऑर्डर तालिका पर ऑर्डर टेबल पर, ऑर्डर तिथि पर और ऑर्डर आइटम पर एक है, एसकेयू/तिथि और रिश्ते के लिए निहित एक है।
  4. यदि आइटम एक संग्रह थे, सूची नहीं, तो क्या यह पूरी तरह से बच्चों _IDX पर एक सूचकांक की आवश्यकता को हटा देगा?

तो, मेरा सवाल होगा, उपर्युक्त वस्तुओं में से कोई भी बड़ी जीत के लिए जा रहा है, या क्या ऐसे अन्य विकल्प हैं जिन्हें मैंने याद किया है जो शुरुआत में ध्यान केंद्रित करना बेहतर होगा?

बोनस अंक: क्या कोई अच्छा 'कम डेटास्टोर लिखने के लिए मार्गदर्शिका' आलेख कहीं है?

उत्तर

2

Billing docs स्पष्ट रूप से राज्य:

  • नई इकाई रखें (इकाई प्रति, इकाई आकार की परवाह किए बिना): 2 राईट + 2 प्रति अनुक्रमित संपत्ति के मूल्य लिखते प्रति समग्र सूचकांक मूल्य

  • मौजूदा +1 लिखने इकाई पुट (प्रति इकाई): 1 लिखें + 4 प्रति संशोधित अनुक्रमित संपत्ति मूल्य लिखते हैं + 2 प्रति संशोधित समग्र सूचकांक मूल्य

  • भी प्रासंगिक: App Engine predefines a simple index on each property of an entity.

सवाल पर:

  1. हाँ, राइट ऑपरेशन की संख्या अनुक्रमित प्रॉपर्टी की संख्या से संबंधित है। उन्हें unindexed to save write ops बनाएं।
  2. दो इकाइयों को एक साथ जोड़कर आपको 1 लिखना होगा (या नई इकाइयों के मामले में 2)।
  3. आपको केवल एक संपत्ति के लिए "स्पष्ट" अनुक्रमणिका होने की आवश्यकता नहीं है। ये स्वचालित रूप से एपेंगेन द्वारा उत्पन्न होते हैं। आपको केवल अधिक गुणों को फैलाते हुए, यौगिक अनुक्रमणिका को स्पष्ट रूप से कॉन्फ़िगर करने की आवश्यकता है।
  4. सं। संग्रह या सूची (= ऑर्डर के साथ संग्रह) सिर्फ जावा प्रतिनिधित्व है, डेटास्टोर एपीआई हमेशा आंतरिक रूप से सूची का उपयोग करता है (= आइटम जोड़े गए हैं)।

अद्यतन:

अनुक्रमित की संख्या लिखने के मूल्य को प्रभावित नहीं बल्कि यह गति है। Writes are done in two phases: प्रतिबद्ध चरण जहां इकाई डेटा सहेजा जाता है, और उस चरण को लागू करें जहां इंडेक्स बनाए गए हैं। प्रतिबद्धता चरण के बाद put ऑपरेशन रिटर्न और इंडेक्स की संख्या से प्रभावित नहीं है।

अपने मामले में आप दो रखरखाव कर रहे हैं, एक के बाद एक। जैसा कि आप AppStats ग्राफ से देख सकते हैं वे लगातार होते हैं। आप उन्हें async operations के समानांतर में निष्पादित करना चाहते हैं (सुनिश्चित नहीं है कि जेडीओ में उपलब्ध है)।

+0

धन्यवाद पीटर, क्या मैंने 4 के बाहर कोई कदम उठाया है, मैंने देखा है कि आप सोचने का सुझाव देंगे, या मैं दिमाग में जो कुछ मिला है उसके साथ सही रास्ते पर हूं। –

+0

@ एशले: मैंने सबसे महत्वपूर्ण जानकारी के साथ उत्तर अपडेट किया - इंडेक्स की संख्या लिखने की लागत को प्रभावित करती है, लेकिन लिखने की गति नहीं। अपने मामले में चीजों को गति देने के लिए एसिंक ऑपरेशंस देखें। –

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