आपके द्वारा वर्णित उपयोग के मामले को नोएसक्यूएल समाधानों में सुंदर ढंग से तैयार नहीं किया जा सकता है। यह एक रेडिस सीमा नहीं है।
मैं इसे थोड़ा और समझाता हूं। आप एक फ़ील्ड पर श्रेणी क्वेरी चला रहे हैं, और दूसरे पर सॉर्ट कर रहे हैं। यह ऐसा कुछ नहीं है जिस पर NoSQL समाधान अच्छे हैं। उदाहरण के लिए, Google App Engine ऐसे प्रश्नों की मनाही करता है। GAE क्वेरी प्रतिबंधों पर एक नज़र डालें और "असमानता फ़िल्टर में गुण अन्य सॉर्ट ऑर्डर से पहले सॉर्ट किए जाने चाहिए" अनुभाग पढ़ें।
<ब्लॉकक्वॉट>असमानता फ़िल्टर से मेल खाने वाले सभी परिणाम प्राप्त करने के लिए, एक क्वेरी पहली मिलान पंक्ति के लिए अनुक्रमणिका तालिका को स्कैन करती है, फिर सभी लगातार परिणाम तब तक लौटाती है जब तक कि उसे ऐसी पंक्ति न मिल जाए जो मेल नहीं खाती। संपूर्ण परिणाम सेट का प्रतिनिधित्व करने के लिए लगातार पंक्तियों के लिए, पंक्तियों को अन्य सॉर्ट ऑर्डर से पहले असमानता फ़िल्टर द्वारा क्रमबद्ध किया जाना चाहिए।
इतना कहने के बाद भी, आप अभी भी अपने प्रश्नों को कुशलता से चला सकते हैं, लेकिन समाधान सुरुचिपूर्ण नहीं होगा।
- वेतन श्रेणियां बनाएं - 0-5000, 5000-10000, 10000-15000 और इसी तरह
users_with_salary:10000-15000
जैसे सेट बनाएं . इस सेट में वे उपयोगकर्ता आईडी होंगे जिनका वेतन दी गई सीमा में है।- इसी तरह, `users_with_rating:1-2" जैसे सेट बनाएं। इस सेट में वे उपयोगकर्ता आईडी होंगे जिनकी रेटिंग दी गई श्रेणी में है
- अब, निम्न छद्म कोड चलाएँ
String userids[];
for(rating = 10; rating > 0; rating--) {
for(salary = min_salary; salary < max_salary; salary += 5000) {
String salary_key = "users_with_salary:" + salary + "-" + (salary+5000);
String rating_key = "users_with_rating:" + rating + "-" + (rating+1);
userids.append(redis.sinter(salary_key, rating_key));
if(userids.length > 10) {
break;
}
}
}
रेडिस 2.6 और लुआ स्क्रिप्टिंग के साथ, आप इसे लुआ सर्वर पर भी चला सकते हैं।
अंत में, यदि आप अपने डेटा पर जटिल प्रश्नों को चलाना चाहते हैं, तो इसे एक रिलेशनल डेटाबेस में मॉडल करना सबसे अच्छा है।