2012-05-31 26 views
6

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

हमारे तालिका (स्तंभ परिवार) इस तरह दिखता है:

Users = 
    { 
    RandomId int, 
    Firstname varchar, 
    Lastname varchar, 
    Age int, 
    Country int, 
    ChildCount int 
    } 

हम अनिवार्य क्षेत्रों (प्रथम, अंतिम नाम, उम्र) और अतिरिक्त खोज विकल्प (देश, ChildCount) के साथ प्रश्न हैं।
इस तरह के प्रश्नों को तेज़ी से बनाने के लिए हम इंडेक्स को कैसे व्यवस्थित करना चाहिए?

सबसे पहले मैंने सोचा, यह समग्र सूचकांक (प्रथम नाम, अंतिम नाम, आयु) पर समग्र सूचकांक बनाना और शेष क्षेत्रों (देश और बाल गणना) पर अलग माध्यमिक सूचकांक जोड़ना स्वाभाविक होगा।
लेकिन मैं माध्यमिक अनुक्रमणिका बनाने के बाद पंक्तियों में पंक्तियों को सम्मिलित नहीं कर सकता और मैं तालिका से क्वेरी नहीं कर सकता।

--cql3 विकल्प के साथ

  • कैसेंड्रा 1.1.0
  • cqlsh का उपयोग करना।

हमारी समस्या को हल करने के लिए कोई अन्य सुझाव (अनिवार्य और अतिरिक्त विकल्पों के साथ जटिल प्रश्न) का स्वागत है।

उत्तर

2

यह मेरा विचार है। आप बस अपने RandomId के साथ पंक्ति कुंजी और सभी शेष फ़ील्ड को कॉलम के रूप में कॉलम परिवार बना सकते हैं (उदा। कॉलम नाम 'firstname', कॉलम मान 'जोन')। इसके बाद आपको इनमें से प्रत्येक कॉलम के लिए द्वितीयक अनुक्रमणिका बनाना होगा। आपके मूल्यों की कार्डिनालिटी कम प्रतीत होती है, इसलिए यह थोड़ा कुशल होना चाहिए। कुछ

CQL कोड होना चाहिए की तरह:

create column family users with comparator=UTF8Type and column_metadata=[{column_name: firstname, validation_class: UTF8Type,index_type: KEYS}, 
{column_name: lastname, validation_class: UTF8Type, index_type: KEYS}, 
{column_name: contry, validation_class: IntegerType, index_type: KEYS}, 
{column_name: age, validation_class: IntegerType, index_type: KEYS]}, 
{column_name: ChildCount, validation_class: IntegerType, index_type: KEYS]]; 

इसके लिए एक अच्छा संदर्भ हो सकता है http://www.datastax.com/docs/0.7/data_model/secondary_indexes

मुझे बताएं कि मैं गलत हूँ दो;

1

बड़ी संख्या में विभाजन सूचकांक शामिल प्रश्नों के लिए बहुत कुशल नहीं हैं।

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

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

यह देना होगा:

CREATE TABLE users(
    id UUID, 
    lastname TEXT, 
    firstname TEXT, 
    age INT, 
    country TEXT, 
    childcount INT, 
    PRIMARY KEY(UUID) 
); 

CREATE TABLE users_by_country(
    country TEXT, 
    firstname TEXT, 
    lastname TEXT, 
    user_uuid UUID, 
    PRIMARY KEY((country), firstname, lastname) 
); 

CREATE TABLE users_by_age(
    age INT, 
    firstname TEXT, 
    lastname TEXT, 
    user_uuid UUID, 
    PRIMARY KEY((age), firstname, lastname) 
); 

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

  • कोई संबंधित समस्या नहीं^_^