10

मैं जहाँ उपयोगकर्ताओं को पोस्ट और मैं इन पदों के लिए टैग जोड़ने में सोच रहा हूँ कर सकते हैं गूगल एप इंजन (जावा), में एक आवेदन का निर्माण कर रहा हूँ, इसलिए मैं कुछ इस तरह होगा: इकाई पोस्ट मेंऐप इंजन डेटास्टोर: जुड़ने के बिना पोस्ट और टैग कैसे कार्यान्वित करें?

:

public List<Key> tags; 

इकाई टैग में:

public List<Key> posts; 

यह क्वेरी, उदाहरण के लिए, सभी एक निश्चित टैग के साथ पोस्ट करने के लिए आसान हो सकता है, लेकिन मैं सभी पोस्ट टैग की एक सूची है कि कैसे मिल सकती है? मैं प्रत्येक टैग के लिए एक क्वेरी कर सकता हूं और फिर परिणामों का एक चौराहे बना सकता हूं, लेकिन शायद एक बेहतर तरीका है ... क्योंकि यह बहुत सारी पोस्टों के साथ धीमा होगा।

एक और चीज जो अधिक कठिन हो सकती है, पोस्ट हो रही है, सामान्य टैग की संख्या द्वारा सामान्य रूप से टैग किए गए टैग प्राप्त करें, इसलिए मुझे किसी भी तरह से "समान" पोस्ट मिल सकती हैं।

ठीक है, इसमें शामिल होने के साथ यह बहुत आसान होगा, लेकिन मैं ऐप इंजन से शुरू कर रहा हूं और वास्तव में जुड़ने के लिए एक अच्छा तरीका नहीं सोच सकता।

धन्यवाद!

उत्तर

5

इस डिज़ाइन के साथ, मुझे डर है कि आपकी टैग एंटिटी एक बाधा हो सकती है, खासकर यदि आप कुछ टैग बहुत आम होने की अपेक्षा करते हैं। तीन विशिष्ट मुद्दों के बारे में मैं सोच सकता हूं कि आपकी हो रही है और रखता है, विवाद और विस्फोट सूचकांक लिखते हैं। आइए उदाहरण के लिए स्टैक ओवरफ्लो देखें - अभी 14,000 पोस्ट "जावा" टैग की गई हैं।

  1. इसका मतलब है कि हर बार जब आपको अपनी जावा टैग इकाई लाने की आवश्यकता होती है तो आप डेटास्टोर से 14k के महत्वपूर्ण डेटा को वापस खींच रहे हैं। तो जब आप एक डालते हैं तो आप इसे वापस भेज रहे हैं। जो कई बाइट्स को जोड़ सकता है।
  2. बाइट्स के आगे और आगे जाने के अलावा, प्रत्येक डालने के लिए इंडेक्स को अद्यतन करने की आवश्यकता होगी। ListProperty नक्शे में प्रत्येक प्रविष्टि एक अलग इंडेक्स प्रविष्टि में। तो अब आप बहुत से इंडेक्स अपडेट कर रहे हैं। जो हमें संख्या 3 तक ले जाता है ...
  3. विस्फोट सूचकांक। प्रत्येक इकाई की सीमा है कि कितनी अनुक्रमणिका प्रविष्टियां हो सकती हैं। मुझे लगता है कि सीमा प्रति इकाई 5000 है। इसलिए वास्तव में यह एक कठिन सीमा है कि कितनी पोस्टों में एक ही टैग हो सकता है।

अतिरिक्त पठन:

अच्छी खबर है, के साथ मुद्दों में से कुछ पर छूता है आपकी आवश्यकताओं के कुछ होगा बस पोस्ट इकाई द्वारा आसानी से संभाला जा सकता है। उदाहरण के लिए, आप आसानी से उन सभी पोस्ट को है सब इस तरह एक प्रश्न फिल्टर के साथ टैग की एक सूची के मिल सकता है:

Query q = pm.newQuery(Post.class) 
q.setFilter("tags" == 'Java' && "tags == 'appengine'"); 

या तो जावा या ऐप्लिकेशन इंजन टैग के साथ सभी पदों के लिए, आप की आवश्यकता होगी प्रत्येक टैग के लिए एक प्रश्न करने के लिए, फिर परिणामों को गठबंधन करें।डेटास्टोर अभी OR/IN प्रकार के संचालन को संभाल नहीं करता है।

संबंधित पोस्ट ढूंढना मुश्किल लगता है। मैं कुछ कॉफी के बाद इसके बारे में सोचूंगा।

+1

मुझे नहीं पता था कि जब मैंने एक सूची संपत्ति के साथ एक इकाई को पुनर्प्राप्त किया था तो उस सूची में सभी इकाइयों को भी पुनर्प्राप्त किया गया था ... क्या यह वैसे है? तो मैं सूची पोस्ट हटा दूंगा। मुझे यह भी नहीं पता था कि मैं एक सूची संपत्ति पर उस तरह से पूछताछ कर सकता हूं: q.setFilter ("टैग" == 'जावा' और "टैग == 'appengine'"); यह वास्तव में अच्छी खबर है :) धन्यवाद पीटर। – Damian

+0

सूचियों में पूर्ण संस्थाएं आपकी संस्थाओं को कैसे लागू करती हैं और क्या आप जेडीओ या जेपीए का उपयोग कर रहे हैं (उदाहरण के लिए जेडीओ में fetch समूहों के बारे में पढ़ें) के आधार पर प्राप्त हो सकता है या नहीं, लेकिन यदि आप केवल चाबियां लोड कर रहे थे, यदि आप लगातार आगे बढ़ रहे हैं तो कुछ हज़ार कुंजियां जोड़ना शुरू हो जाएंगी। –

1

आप इस वीडियो को Google IO से देखना चाहते हैं। रिलेशन इंडेक्स इकाइयां जो आपको चाहिए और को Tag इकाई पर निकालने की अनुमति देती है। Post इकाई पर List<Key> tags

1

इस पर @ topchef का ब्लॉग पोस्ट देखें: Efficient Keyword Search with Relation Index Entities and Objectify for Google Datastore। यह रिलेशन इंडेक्स इकाइयों और ऑब्जेक्टिफ़ाई का उपयोग करके सूची गुणों के साथ खोज को कार्यान्वित करने के बारे में बात करता है।

+0

यह मेरे प्रश्न का उत्तर था, http://stackoverflow.com/questions/5778606/how-do-you-use-list-properties-in-google-app-engine-datastore-in-java – onejigtwojig

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