मान लीजिए मैं एक स्तंभ परिवार है:माध्यमिक अनुक्रमणिका कैसंद्रा में कैसे काम करते हैं?
CREATE TABLE update_audit (
scopeid bigint,
formid bigint,
time timestamp,
record_link_id bigint,
ipaddress text,
user_zuid bigint,
value text,
PRIMARY KEY ((scopeid, formid), time)
) WITH CLUSTERING ORDER BY (time DESC)
दो माध्यमिक अनुक्रमित के साथ
, जहां record_link_id
में एक अत्यधिक-स्तंभ है:
CREATE INDEX update_audit_id_idx ON update_audit (record_link_id);
CREATE INDEX update_audit_user_zuid_idx ON update_audit (user_zuid);
मेरी जानकारी कैसेंड्रा तो जैसे दो छिपा स्तंभ परिवारों पैदा करेगा के अनुसार :
CREATE TABLE update_audit_id_idx(
record_link_id bigint,
scopeid bigint,
formid bigint,
time timestamp
PRIMARY KEY ((record_link_id), scopeid, formid, time)
);
CREATE TABLE update_audit_user_zuid_idx(
user_zuid bigint,
scopeid bigint,
formid bigint,
time timestamp
PRIMARY KEY ((user_zuid), scopeid, formid, time)
);
कैसंड्रा माध्यमिक इंडेक्स को मानक इंडेक्स के रूप में वितरित किए जाने के बजाय स्थानीय इंडेक्स के रूप में लागू किया जाता है एल टेबल प्रत्येक नोड केवल उस डेटा के लिए एक इंडेक्स स्टोर करता है जो इसे स्टोर करता है।
select * from update_audit where scopeid=35 and formid=78005 and record_link_id=9897;
- कैसे इस क्वेरी कैसेंड्रा में 'हुड के नीचे' पर अमल होगा:
निम्न क्वेरी पर विचार करें?
- उच्च-कार्डिनिटी कॉलम इंडेक्स (
record_link_id
) इसके प्रदर्शन को कैसे प्रभावित करेगा? - क्या कैसंद्रा उपरोक्त क्वेरी के लिए सभी नोड्स को छूएगा? क्यों?
- कौन सा मानदंड पहले निष्पादित किया जाएगा, बेस टेबल partition_key या द्वितीयक अनुक्रमणिका partition_key? कैसंद्रा इन दो परिणामों को कैसे छेड़छाड़ करेगा?
मेरा 2 सेंट: चूंकि आपने एक पूर्ण विभाजन कुंजी निर्दिष्ट की है, इसलिए सभी नोड्स से पूछताछ करने का कोई मतलब नहीं है। यह स्पष्ट रूप से केवल एक नोड से पूछताछ (35, 78005) के लिए जिम्मेदार होना चाहिए। जिस तरह से कैसंद्रा डिज़ाइन किया गया है, मैं उम्मीद करता हूं कि इसमें प्राथमिकता के रूप में शामिल नोड्स की संख्या को कम करने पर विचार करें। यह देखते हुए कि, केवल शामिल नोड को शायद यह देखना चाहिए कि इसके लिए कितने रिकॉर्ड हैं (35, 78005) और 'record_link_id = 9897' के लिए इंडेक्स में कितने हैं, और क्वेरी (जो' सूचकांक को प्राथमिक कुंजी द्वारा क्रमबद्ध किया गया है या नहीं, इस पर निर्भर करता है कि यह सबसे छोटा है)। –
मेरा सिद्धांत http://docs.datastax.com/en/cql/3.0/cql/ddl/ddl_using_multiple_indexes.html –
द्वारा समर्थित होने पर प्रतीत होता है यदि यह तरीका है, तो उच्च-कार्डिनिटी कॉलम पर इंडेक्स बनाना सबसे तेज़ होगा और सर्वोत्तम डेटा मॉडल (यदि आप मानदंड में विभाजन कुंजी भी शामिल हैं)। – Aftab