নিম্নলিখিত key
ধরণের পার্থক্য বুঝতে আমি নেটের চারপাশে নিবন্ধগুলি পড়ছি । তবে এটা বুঝতে আমার পক্ষে শক্ত মনে হয়েছে। উদাহরণগুলি স্পষ্টভাবে বুঝতে আরও ভাল করতে সহায়তা করবে।
primary key,
partition key,
composite key
clustering key
নিম্নলিখিত key
ধরণের পার্থক্য বুঝতে আমি নেটের চারপাশে নিবন্ধগুলি পড়ছি । তবে এটা বুঝতে আমার পক্ষে শক্ত মনে হয়েছে। উদাহরণগুলি স্পষ্টভাবে বুঝতে আরও ভাল করতে সহায়তা করবে।
primary key,
partition key,
composite key
clustering key
উত্তর:
এটিকে ঘিরে অনেক বিভ্রান্তি রয়েছে, আমি এটিকে যথাসম্ভব সহজ করার চেষ্টা করব।
সারণী থেকে ডেটা পুনরুদ্ধার করতে ব্যবহৃত এক বা একাধিক কলামকে নির্দেশ করার জন্য প্রাথমিক কীটি একটি সাধারণ ধারণা।
প্রাথমিক কীটি সহজ এবং এমনকি ইনলাইন ঘোষিত হতে পারে :
create table stackoverflow_simple (
key text PRIMARY KEY,
data text
);
তার মানে এটি একটি একক কলাম দ্বারা তৈরি।
কিন্তু প্রাথমিক কী এও হতে পারে যৌগিক (ওরফে যৌগ ), আরো কলাম থেকে উত্পন্ন।
create table stackoverflow_composite (
key_part_one text,
key_part_two int,
data text,
PRIMARY KEY(key_part_one, key_part_two)
);
একটি পরিস্থিতিতে যৌগিক প্রাথমিক কী, কী এর "প্রথম অংশ" বলা হয় পার্টিশন মূল (এই উদাহরণে key_part_one হয় পার্টিশন চাবি) এবং কী দ্বিতীয় অংশ ক্লাস্টারিং চাবিকাঠি (এই উদাহরণে key_part_two )
দয়া করে মনে রাখবেন যে উভয় বিভাজন এবং ক্লাস্টারিং কী আরও কলাম দ্বারা তৈরি করা যেতে পারে , এখানে কীভাবে:
create table stackoverflow_multiple (
k_part_one text,
k_part_two int,
k_clust_one text,
k_clust_two int,
k_clust_three uuid,
data text,
PRIMARY KEY((k_part_one, k_part_two), k_clust_one, k_clust_two, k_clust_three)
);
এই নামের পিছনে ...
আরও ব্যবহারের তথ্য: ডেটাস্ট্যাক্স ডকুমেন্টেশন
insert into stackoverflow_simple (key, data) VALUES ('han', 'solo');
select * from stackoverflow_simple where key='han';
টেবিল বিষয়বস্তু
key | data
----+------
han | solo
সমন্বিত / কমপিউ কী "প্রশস্ত সারি" পুনরুদ্ধার করতে পারে (যেমন আপনি ক্লাস্টারিং কীগুলি সংজ্ঞায়িত করলেও আপনি কেবল পার্টিশন কী দ্বারা প্রশ্ন করতে পারেন)
insert into stackoverflow_composite (key_part_one, key_part_two, data) VALUES ('ronaldo', 9, 'football player');
insert into stackoverflow_composite (key_part_one, key_part_two, data) VALUES ('ronaldo', 10, 'ex-football player');
select * from stackoverflow_composite where key_part_one = 'ronaldo';
টেবিল বিষয়বস্তু
key_part_one | key_part_two | data
--------------+--------------+--------------------
ronaldo | 9 | football player
ronaldo | 10 | ex-football player
তবে আপনি সমস্ত কী (পার্টিশন এবং ক্লাস্টারিং উভয়) দিয়ে জিজ্ঞাসা করতে পারেন ...
select * from stackoverflow_composite
where key_part_one = 'ronaldo' and key_part_two = 10;
ক্যোয়ারী আউটপুট
key_part_one | key_part_two | data
--------------+--------------+--------------------
ronaldo | 10 | ex-football player
গুরুত্বপূর্ণ দ্রষ্টব্য: পার্টিশন কীটি একটি ব্যবহার করে কোয়েরি সম্পাদনের জন্য ন্যূনতম-নির্দিষ্টকরণকারী where clause
। আপনার যদি একটি সম্মিলিত পার্টিশন কী থাকে তবে নীচের মতো
উদাহরণ: PRIMARY KEY((col1, col2), col10, col4))
আপনি কমপক্ষে কম 1 এবং কল 2 উভয়কেই পাস করে ক্যোয়ারী সম্পাদন করতে পারেন, এটি 2 টি কলাম যা পার্টিশন কী সংজ্ঞায়িত করে। ক্যোয়ারী তৈরি করার জন্য "সাধারণ" নিয়মটি হ'ল আপনাকে কমপক্ষে সমস্ত পার্টিশন কী কলামগুলি পাস করতে হবে, তারপরে আপনি প্রতিটি ক্লাস্টারিং কীটি সেটিকে সেট করা ক্রমে যুক্ত করতে পারেন।
সুতরাং বৈধ প্রশ্নগুলি ( মাধ্যমিক সূচক বাদে )
অবৈধ:
আশাকরি এটা সাহায্য করবে.
গৃহীত উত্তর হিসাবে একটি সংক্ষিপ্ত উত্তর যুক্ত করা বেশ দীর্ঘ। "সারি" এবং "কলাম" পদটি CQL এর প্রসঙ্গে ব্যবহৃত হয়, ক্যাসান্দ্রা বাস্তবে কীভাবে প্রয়োগ করা হয় তা নয়।
উদাহরণ:
PRIMARY KEY (a)
: পার্টিশন কী a
।PRIMARY KEY (a, b)
পার্টিশন কীটি হল a
, ক্লাস্টারিং কীটি b
।PRIMARY KEY ((a, b))
: যৌগিক পার্টিশন কী হ'ল (a, b)
।PRIMARY KEY (a, b, c)
পার্টিশন কীটি হল a
, যৌগিক ক্লাস্টারিং কী (b, c)
।PRIMARY KEY ((a, b), c)
: যৌগিক পার্টিশন কীটি হল (a, b)
, ক্লাস্টারিং কীটি c
।PRIMARY KEY ((a, b), c, d)
: কম্পোজিট পার্টিশন কীটি হল (a, b)
, যৌগিক ক্লাস্টারিং কীটি (c, d)
।ক্যাসান্দ্রায়, প্রাথমিক কী, পার্টিশন কী, যৌগিক কী, ক্লাস্টারিং কী-এর মধ্যে পার্থক্য সবসময় কিছুটা বিভ্রান্তি সৃষ্টি করে .. সুতরাং আমি নীচে ব্যাখ্যা করতে যাচ্ছি এবং একে অপরের সাথে সম্পর্কযুক্ত। ক্যাসান্দ্রা ডাটাবেস অ্যাক্সেসের জন্য আমরা সিসিকিউএল (ক্যাসান্দ্রা ক্যোয়ারী ল্যাঙ্গুয়েজ) ব্যবহার করি। দ্রষ্টব্য: - উত্তরটি ক্যাসান্দ্রার আপডেট হওয়া সংস্করণ অনুসারে। প্রাথমিক কী:
CREATE TABLE Cass (
id int PRIMARY KEY,
name text
);
Create Table Cass (
id int,
name text,
PRIMARY KEY(id)
);
সিকিউএল-তে প্রাথমিক কী সম্পর্কিত বিষয়গুলির জন্য কলামগুলি সংজ্ঞায়িত করা হয়েছে। কীটির প্রথম কলামকে পার্টিশন কী বলা হয় এমন সম্পত্তি যুক্ত যা সমস্ত সারি একই পার্টিশন কী (এমনকি টেবিল জুড়ে এমনকি) ভাগ করে একই শারীরিক নোডে সঞ্চয় করে। এছাড়াও, প্রদত্ত টেবিলের জন্য একই পার্টিশন কী ভাগ করে নেওয়া সারিগুলিতে সন্নিবেশ / আপডেট / মুছে ফেলা পারমাণবিকভাবে এবং বিচ্ছিন্নভাবে সঞ্চালিত হয়। নোট করুন যে একটি যৌগিক পার্টিশন কী থাকা সম্ভব, যেমন একাধিক কলাম দ্বারা গঠিত একটি পার্টিশন কী, কোন কলামগুলি পার্টিশন কী গঠন করে তা নির্ধারণ করতে অতিরিক্ত বন্ধনীগুলির একটি সেট সেট ব্যবহার করে।
পার্টিশন এবং ক্লাস্টারিং প্রাথমিক কী সংজ্ঞা দুটি অংশ নিয়ে গঠিত: পার্টিশন কী এবং ক্লাস্টারিং কলাম। প্রথম অংশটি স্টোরেজ ইঞ্জিন সারি কীতে মানচিত্র করে, যখন দ্বিতীয়টি একটি সারিতে কলামগুলি গ্রুপ করতে ব্যবহৃত হয়।
CREATE TABLE device_check (
device_id int,
checked_at timestamp,
is_power boolean,
is_locked boolean,
PRIMARY KEY (device_id, checked_at)
);
এখানে ডিভাইস_আইডিটি পার্টিশন কী এবং চেকড_ ক্লাস্টার_কি key
আমাদের একাধিক ক্লাস্টার কী পাশাপাশি পার্টিশন কীও থাকতে পারে যা ঘোষণার উপর নির্ভর করে।
প্রাথমিক কী : পার্টিশন কী (গুলি) এবং [[চ্ছিক ক্লাস্টারিং কী (বা কলাম) দ্বারা গঠিত]
পার্টিশন কী : পার্টিশন কী এর হ্যাশ মান একটি ক্লাস্টারে নির্দিষ্ট নোড নির্ধারণ করতে ডেটা সঞ্চয় করতে ব্যবহৃত হয়
ক্লাস্টারিং কী : ব্যবহৃত হয় প্রতিটি পার্টিশনে ডেটা বাছাই করুন (বা দায়বদ্ধ নোড এবং এর প্রতিলিপি)
যৌগিক প্রাথমিক কী : উপরে যেমন বলা হয়েছে, ক্লাস্টারিং কীগুলি প্রাথমিক কীতে alচ্ছিক। যদি তাদের উল্লেখ না করা হয় তবে এটি একটি সাধারণ প্রাথমিক কী। যদি ক্লাস্টারিং কীগুলি উল্লেখ করা হয় তবে এটি একটি যৌগিক প্রাথমিক কী।
সম্মিলিত পার্টিশন কী : পার্টিশন কী হিসাবে কেবল একটি কলাম ব্যবহার করার ফলে বিস্তৃত সারি সমস্যা হতে পারে (ব্যবহারের ক্ষেত্রে / ডেটা মডেলিংয়ের উপর নির্ভর করে)। তাই পার্টিশন কী কখনও কখনও একাধিক কলামের সংমিশ্রণ হিসাবে নির্দিষ্ট করা হয়।
কোন প্রশ্নটি কোনটি বাধ্যতামূলক , কোনটি এড়িয়ে যেতে পারে ইত্যাদি সম্পর্কে বিভ্রান্তি সম্পর্কিত, ক্যাসান্দ্রাকে দৈত্যাকার হ্যাশম্যাপের সাহায্যে কল্পনা করার চেষ্টাকরে। সুতরাং একটি হ্যাশম্যাপে, আপনি কী ব্যতীত মানগুলি পুনরুদ্ধার করতে পারবেন না।
এখানে পার্টিশন কীগুলি সেই কীটির ভূমিকা পালন করে। সুতরাং প্রতিটি প্রশ্নের জন্য তাদের নির্দিষ্ট করা দরকার। যা ছাড়া ক্যাসান্দ্রা জানতে পারবে না কোন নোডটি অনুসন্ধান করতে হবে। ক্লাস্টারিং কী (কলাম, যা ঐচ্ছিক) আরও আপনার অনুসন্ধান সংকীর্ণ পর ক্যাসান্ড্রা নির্দিষ্ট নোড খুঁজে বের (এবং এটা প্রতিলিপি) সাহায্যের নির্দিষ্ট জন্য দায়ী দেশভাগের কী ।
সংক্ষিপ্ত অর্থে:
পার্টিশন কীটি একটি সারির সনাক্তকরণ ছাড়া আর কিছুই নয় , সেই সনাক্তকরণ বেশিরভাগ ক্ষেত্রে একক কলাম হয় ( প্রাথমিক কী বলে ) কখনও কখনও একাধিক কলামের সংমিশ্রণ (যাকে সম্মিলিত পার্টিশন কী বলা হয় )।
ক্লাস্টার কী ইনডেক্সিং এবং বাছাই ছাড়া কিছুই নয় । ক্লাস্টার কীগুলি কয়েকটি জিনিসের উপর নির্ভর করে:
প্রাথমিক কী কলামগুলি বাদে আপনি কোথায় কলামগুলি ব্যবহার করেন।
আপনার যদি খুব বড় রেকর্ড থাকে তবে আমি কী উদ্বেগের ভিত্তিতে সহজ ব্যবস্থাপনার জন্য তারিখটি ভাগ করতে পারি। উদাহরণস্বরূপ, আমার কাছে কাউন্টি জনসংখ্যার রেকর্ডের পরিমাণ 1 মিলিয়ন। সহজ পরিচালনার জন্য, আমি স্টেটের ভিত্তিতে এবং পিনকোড এবং এর পরে ডেটা ক্লাস্টার করি।
লক্ষণীয় যে, আপনি সম্ভবত রিলেশনাল ওয়ার্ল্ডে (কম্পোজিট কী) একই ধরণের ধারণাগুলির চেয়ে বেশি ব্যবহার করবেন।
উদাহরণ - ধরুন আপনাকে সম্প্রতি এন গ্রুপে যোগ দেওয়া সর্বশেষ এন ব্যবহারকারীদের সন্ধান করতে হবে? আপনি কীভাবে দক্ষতার সাথে দেওয়া এই পাঠকে এই ক্ষেত্রে প্রাধান্য দেবেন? এর মতো (অফিশিয়াল ক্যাসান্দ্রা গাইড থেকে ):
CREATE TABLE group_join_dates (
groupname text,
joined timeuuid,
join_date text,
username text,
email text,
age int,
PRIMARY KEY ((groupname, join_date), joined)
) WITH CLUSTERING ORDER BY (joined DESC)
এখানে, বিভাজন কী নিজেই যৌগিক এবং ক্লাস্টারিং কীটি একটি যুক্ত তারিখ। একটি ক্লাস্টারিং কীটি একটি যোগদানের তারিখ হওয়ার কারণ হ'ল ফলাফলগুলি ইতিমধ্যে বাছাই করা হয়েছে (এবং সঞ্চিত রয়েছে, যা অনুসন্ধানগুলি দ্রুত করে তোলে)। তবে কেন আমরা পার্টিশন কী জন্য একটি যৌগিক কী ব্যবহার করব ? কারণ আমরা সর্বদা সম্ভব কম পার্টিশন পড়তে চাই । সেখানে join_date স্থাপন কীভাবে সহায়তা করে? এখন একই গ্রুপ এবং একই যোগদানের তারিখের ব্যবহারকারীরা একটি একক বিভাগে থাকতে পারবেন! এর অর্থ আমরা সর্বদা যতটা সম্ভব পার্টিশনটি পড়ব (প্রথমে নতুনটি দিয়ে শুরু করুন, তারপরে তার মধ্যে ঝাঁপিয়ে পড়ার পরিবর্তে আরও পুরানো এবং আরও কিছুতে যান)।
বস্তুত, চরম ক্ষেত্রে আপনি একটি এর হ্যাশ ব্যবহার করতে হবে join_date একটি বদলে join_date করছি, যাতে আপনি গত 3 দিন ধরে অনুসন্ধান প্রায়ই ঐ ভাগ একই হ্যাশ এবং সেইজন্য একই পার্টিশন থেকে পাওয়া যায় - একা!
ক্যাসান্দ্রার প্রাথমিক কীটিতে সাধারণত দুটি অংশ থাকে - পার্টিশন কী এবং ক্লাস্টারিং কলাম।
প্রাথমিক_কি ((পার্টিশন_কি), ক্লাস্টারিং_কোল)
পার্টিশন কী - প্রাথমিক কীটির প্রথম অংশ। পার্টিশন কীটির মূল লক্ষ্য হ'ল নোড যা নির্দিষ্ট সারিটি সঞ্চয় করে তা চিহ্নিত করা।
টেবিল ফোন তৈরি করুন (পুস্তক_নাম, নাম পাঠ্য, বয়স পূর্ববর্তী, শহরের পাঠ্য, প্রাথমিক কী) ((ফোন_নাম, নাম), বয়স);
এখানে, (ফোন_নাম, নাম) হল পার্টিশন কী। ডেটা সন্নিবেশ করার সময়, পার্টিশন কী এর হ্যাশ মান উত্পন্ন হয় এবং এই মানটি সিদ্ধান্ত নেয় যে সারিটি কোন নোডে প্রবেশ করা উচিত।
একটি 4 নোড ক্লাস্টার বিবেচনা করুন, প্রতিটি নোডে এটি সংরক্ষণ করতে পারে এমন বিভিন্ন হ্যাশ মান রয়েছে। (লিখুন) ফোন_বুক ভ্যালুতে অন্তর্ভুক্ত করুন (7826573732, 'জোয়ে', 25, 'নিউ ইয়র্ক');
এখন, পার্টিশন কী এর হ্যাশ মান ক্যাসান্দ্রা পার্টিশনকারী দ্বারা গণনা করা হয়। বলুন, হ্যাশ মান (7826573732, 'জোয়ি') → 12, এখন, এই সারিটি নোড সি-তে সন্নিবেশ করা হবে
(পড়ুন) নির্বাচন করুন * ফোন_বুক থেকে যেখানে ফোন_নাম = 7826573732 এবং নাম = 'জোয়ে';
এখন, আবার পার্টিশন কী (7826573732, 'জোয়াই) এর হ্যাশ মান গণনা করা হয়, যা আমাদের ক্ষেত্রে নোড সি-তে থাকে 12, যা থেকে পড়া হয়।
আপনি যে প্রশ্নের সমাধান করছেন তার উপর নির্ভর করে একটি প্রাথমিক কীতে একাধিক পার্টিশন কী এবং ক্লাস্টারিং কলাম থাকতে পারে।
প্রাথমিক_কি ((pk1, pk2), কল 1, কল 2)
ডাটাবেস ডিজাইনে, একটি যৌগিক কী সুপারকিজির একটি সেট যা সর্বনিম্ন নয়।
একটি যৌগিক কী এমন একটি সেট যা একটি যৌগিক কী এবং কমপক্ষে একটি বৈশিষ্ট্য যা সুপারকি নয় contains
প্রদত্ত সারণী: EMPLOYEES {কর্মচারী_আইডি, প্রথম নাম, উপাধি}
সম্ভাব্য সুপারকিগুলি হ'ল:
{employee_id}
{employee_id, firstname}
{employee_id, firstname, surname}
{কর্মচারী_আইডি only হ'ল একমাত্র ন্যূনতম সুপারকি, যা এটিকে একমাত্র প্রার্থী কী হিসাবে তৈরি করে - given প্রথম নাম} এবং {উপাধি un স্বতন্ত্রতার গ্যারান্টি দেয় না। যেহেতু একটি প্রাথমিক কীটি নির্বাচিত প্রার্থী কী হিসাবে সংজ্ঞায়িত করা হয় এবং এই উদাহরণে কেবলমাত্র একটি প্রার্থী কী বিদ্যমান, তাই {কর্মচারী_আইডি the হ'ল ন্যূনতম সুপারকি, একমাত্র প্রার্থী কী এবং একমাত্র সম্ভাব্য প্রাথমিক কী।
যৌগিক কীগুলির সম্পূর্ণ তালিকা:
{employee_id, firstname}
{employee_id, surname}
{employee_id, firstname, surname}
একমাত্র যৌগিক কীটি হ'ল {কর্মচারী_আইডি, প্রথম নাম, উপাধি} যেহেতু সেই কীটিতে একটি যৌগিক কী ({কর্মচারী_আইডি, প্রথম নাম}) এবং এমন একটি বৈশিষ্ট্য রয়েছে যা সুপারকি নয় (urn અટর})।