2015-05-27 33 views
5

हैज़लकास्ट में, क्या मूल्यों की बजाय कुंजी के गुणों के आधार पर एक IMAP से पूछना संभव है? सभी Hazelcast उदाहरण मूल्य से पूछताछ दिखाते हैं। जैसे, कुंजी है कि तार कर रहे हैं के साथ कर्मचारियों का एक नक्शा के लिए:Hazelcast (prredicates का उपयोग करके) में मूल्य के बजाय कुंजी से पूछना संभव है?

IMap<String, Employee> employees; 

विशिष्ट खोज विधेय तो कर्मचारी गुण (नाम, वेतन, आदि) के आधार पर खोज करते हैं। लेकिन मेरे मामले इस तरह के रूप में और अधिक जटिल चाबियाँ, का उपयोग करता है:

class DataAttributes { 
    String theDescription; 
    Date theStartTime; 
    public String getDescription() { return theDescription; } 
    // etc.... 
} 

मैं एक विधेय है कि, कुंजी द्वारा क्वेरी कर सकता है एक उचित वापस जाने के लिए लिखना चाहते हैं:

IMap<DataAttributes, DataValue> myData; 

तो अगर DataAttributes जैसे क्षेत्रों है DataValue ऑब्जेक्ट। यह काम नहीं करता:

Predicate pred = Predicates.equal("description", "myDescription"); 
myData.keySet(pred); // Throws IllegalArgumentException: "There is no suitable accessor for..." 

मैं रोल मेरी खुद कर सकता है के रूप में this answer में सुझाव दिया, लेकिन मैं नहीं बल्कि अगर मैं कर सकते हैं एक आउट-ऑफ-द-बॉक्स समाधान का उपयोग करेंगे।

इससे कोई फर्क नहीं पड़ता कि मैं मानदंड API, या वितरित SQL क्वेरी API का उपयोग कर हवा करता हूं। कोई भी कामकाजी सवाल बहुत अच्छा होगा। घनत्व वाले गुणों पर काम करने वाले समाधान के लिए बोनस पॉइंट (यानी: डेटा एट्रिब्यूट्स theStartTime.getYear())।

उत्तर

7

प्रैक्टिकेटबिल्डर (com.hazelcast.query.PredicateBuilder) का उपयोग करना संभव है। PredicateBuilder प्रतिमान आप कुंजी के आधार पर क्वेरी करने के लिए है, तो तरह की अनुमति देता है:

EntryObject eo = new PredicateBuilder().getEntryObject(); 
Predicate fredWithStartTimeThisYear = eo.key().get("Description").equal("Fred") 
    .and(eo.key().get("theStartTime.Year").equal(2015)); 

ध्यान दें कि आप एक्सेसर विधि ("गेटर") या क्षेत्र के नाम से वर्ग के सदस्यों का उल्लेख कर सकते, जैसा कि आप ऊपर के उदाहरण कोड में देख सकते हैं । मुझे यह जानकारी "Mastering Hazelcast" ऑनलाइन पुस्तक में मिली है, जो hazelcast.org पर उपलब्ध है (लेकिन आपको इसे एक्सेस करने के लिए पंजीकरण फॉर्म भरना होगा)।

+0

नोट करें कि भविष्य में (कुंजी या मूल्यों पर) का उपयोग करना बहुत महंगा है जब मानचित्र में बहुत सारे डेटा लोड होते हैं ... इस उपयोग से सावधान रहें! – Donatello

+0

@ डोनाटेल्लो राइट। मैं आमतौर पर इसे कम करने के लिए इंडेक्स का उपयोग करता हूं। और एक उचित धारावाहिक का उपयोग करना भी सहायक है। –

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