Replication Factor : به تعداد Node هایی که به عنوان نگهدارنده کپی داده های هر سطر اشاره میکند. کاساندرا یک کپی از هر Row Base را در Row Key ذخیره می کند. این را اصطلاحا Replica می نامند.
Replica Placement Strategy : به تعداد Replica در درون حلقه ها اشاره دارد. استراتژی های متفاوتی برای کپی کردن کلید ها در Node ها وجود دارد. در زیر به دو استراتژی اصلی اشاره می کنیم.
ویژگی های Keyspace
Replication Factor : به تعداد Node هایی که به عنوان نگهدارنده کپی داده های هر سطر اشاره میکند. کاساندرا یک کپی از هر Row Base را در Row Key ذخیره می کند. این را اصطلاحا Replica می نامند.
Replica Placement Strategy : به تعداد Replica در درون حلقه ها اشاره دارد. استراتژی های متفاوتی برای کپی کردن کلید ها در Node ها وجود دارد. در زیر به دو استراتژی اصلی اشاره می کنیم.
Simple Strategy : در ابتدا Replica بر روی Node ای که توسط Partitioner مشخص شده انجام میشود. Replica های بعدی به صورت ساعت گرد در حلقه مورد استفاده قرار می گیرد و اطلاعات را روی Node ها می نویسد.
Network Topology Strategy : زمانی از این استراتژی استفاده میکنیم که Cluster ها چندین Data Center داشته باشند. در این حالت اطلاعات Node های Data Center اول را روی Node های متناظر آن در Data Center های دیگر می نویسد.
برای Network Topology Strategy دو روش مرسوم وجود دارد.
Tow Replica In Each Data Center : در این حالت در هر Data Center دو Node را برای Replica در نظر میگیریم. در این حالت اگر یک Node را از دست بدهیم بدون مشکل می توانیم به سرویس دهی ادامه دهیم. ولی اگر چندین Node همزمان دچار مشکل شود در سرویس دهی دچار مشکل خواهیم شد.
Tree Replica In Each Data Center : در این حالت در هر Data Center دو Node را برای Replica در نظر میگیریم. در این حالت اگر چندین Node را همزمان از دست بدهیم همچنان سرویس دهی بدون مشکل انجام خواهد شد.
ویژگی های Column Family
Column Family یک ظرف است برای نگهداری ترتیبی مجموعه سطر ها . سطر ها دارای یک مجموعه دارای ترتیب از ستون ها هستند. در Column Family ها می توانید هر زمان که نیاز باشد ستون اضافه کنیم.
هر Column Family از چندین Row Key تشکیل شده است که مفهوم رکورد را دارند و هر کدام از Row Key ها شامل چندین ستون هستند که از Column Value تشکیل شده اند. در واقع هر Column Family از یک یا چند سطر با ساختار مشابه تشکیل شده است.
هر سطر یک Row Key دارد که Unique Identifier ( کلید یکتا ) در آن ذخیره میشود. یعنی مقادیر Row Key های مشابه نخواهیم داشت. در Column ها علاوه بر اینکه می توانیم اطلاعات ذخیره کنیم ، امکان ذخیره سازی Metadata وجود دارد. در هر Row یک یا چند ستون وجود دارد که Column ها نام یا کلید ستون را نگهداری میکنند و Value ها مقدار مربوط به آنها را.
طراحی هر سطر به یکی از دو صورت Wide یا Skinny انجام میشود.
سطر های Wide می توانند مقادیر بسیار زیادی ستون داشته باشند و هر ستون میتوانم حجم زیادی از داده را در خود نگهداری کند.
سطر های Skinny تعداد محدودی ستون را پشتیبانی میکند
ویژگیهای CQL Table
یک CQL Table در واقع یک Column Family است. CQL Table ها یک View دو بعدی از Column Family ها ایجاد می کنند که می توانند شامل داده های چند بعدی باشند. CQL Table ها و Column Family ها را می توان به صورت گسترده به جای یکدیگر استفاده کرد. CQL Table ها از دو نوع Static و Dynamic تشکیل می شوند.
برای ایجاد یک تیبل از دستور Create Table استفاده می کنیم.
ویژگی های Table
نام تیبل می تواند از حروف ، اعداد و آندرلاین تشکیل شود و باید حتما با یک حرف شروع شود. نام تیبل باید منحصر به فرد باشد.
برای ایجاد Primary Key از Partition Key استفاده می شود و در ادامه آن Clustering Columns مورد استفاده قرار می گیرد . در Clustering Column مقادیر کمتر از 64 KB نگهداری می شوند.
ویژگی های فیلد ها
Column_name : برای هر ستون باید یک نام منحصر به فرد انتخاب شود. از اسامی رزرو شده استفاده نمی کنیم.
Cql_type_defenition : نوع داده ای مورد استفاده مشخص می شود
Static : این پارامتر اختیار است و مشخص می کند که ستون یک single value است.
PRIMARY KEY : اختیار است و مشخص می کند که این ستون کلید اولیه برای جدول است.
انواع کلید در جداول بانک اطلاعاتی کاساندرا
Primary Key مشخص کننده منحصر به فرد بودن یک سطر است. هر جدول حداقل یک Primary Key دارد.
یک فیلد اگر Static باشد نمی تواند به عنوان Primary Key استفاده شود.
در Primary Key ها می توانیم از frozen Collections استفاده کنیم.
frozen Collections یک مجموعه از مقادیر چند ستون است که به عنوان یک ستون در نظر گرفته میشود و اگر بخوایم یکی از این فیلد ها را تغییر دهیم باید همه آن ها بروز شوند.
Single Primary Key : در این حالت ما یک ستون را به عنوان Primary Key استفاده می شود. به این ستون Partitioning Key نیز گفته می شود. اطلاعات بر اساس این ستون مورد بخش بندی قرار می گیرند. اطلاعات در Node ها بر اساس همین فیلد تقسیم می شوند.
Compound Primary Key : کلید ترکیبی است که از چند ستون برای کلید استفاده میشود. در اینجا race_name نقش Partitioning Key و race_position نقش Clustering Key را دارد.
در این حالت اطلاعات بر اساس race_name پارتیشن بندی و بر اساس race_position کلاستر می شوند. کلاسترینگ فرایند مرتب سازی داده ها در درون پارتیشن است.
Composite Partitioning Key : این روش زمانی استفاده میشود که بخواهیم multiple partitions استفاده کنیم. در این حالت از چند ستون به صورت Composite Partitioning Key برای پارتیشن بندی استفاده می شود و پارتیشن بندی بر اساس این چند ستون صورت میگیرد و یک فیلد هم جهت کلاسترینگ معرفی می شود. این روش زمانی استفاده میشود که حجم داده های بسیار زیادی روی یک single Partition داشته باشیم.
برای مشخص کردن ترتیب کلاسترینگ از Order By در دستور ایجاد تیبل استفاده می کنیم. با این کار اطلاعات هنگام ذخیره شدن به صورت مرتب در جدول قرار می گیرند تا سرعت بازخوانی بسیار بالا برود. این دستور قابلیت صعودی و نزولی را پشتیبانی میکند.
Static CQL Table : حالت استاتیک CQL Table ها بسیار شبیه به تیبل ها در بانک های اطلاعاتی رابطه است. ساختار تیبل را از ابتدا به صورت مشخص تعریف می شود و با همین ساختار از آن استفاده میشود.
برای مثال در تصویر بالا یک جدول برای نگهداری اطلاعات ویدئوها ایجاد میشود که با استفاده از شناسه کاربر ، تاریخ و اطلاعات دیگر می توانیم اطلاعات فایل های ویدیو که یک کاربر ارسال کرده است را بازخوانی نمایم. در این حالت کوئری بسیار شبیه به همان بانک های اطلاعاتی رابطه ای خواهد بود.
Dynamic CQL Table : در این حالت این امکان فراهم می شود که به وسیله این ساختار مجموعه جواب را پیش پردازش کنیم و آن را به عنوان یک سطر Single نگهداری کنیم تا بازیابی اطلاعات بسیار سریع تر باشد.
در این روش یک کلید شامل شناسه کاربر، تاریخ و شناسه ویدئو ایجاد میکنیم و این کار باعث می شود سرعت بازخوانی اطلاعات مربوط به یک کاربر بسیار سریع تر از حالت معمول باشد.
دستور Alter
Alter Table : با استفاده از این دستور می توان نوع ستون ها رو تغییر داد، ستون اضافه کرد، تغییر نام داد، حذف کرد و پراپرتی های جدول را تغییر دهیم.
ALTER TABLE table-name
[ ALTER column_name TYPE cql_type ]
[ ADD ( column_definition_list ) ]
[ DROP ( column_list ) ]
[ RENAME column_name TO column_name ]
[ WITH table_properties ];
برای تغییر دادن نوع داده یک ستون از دستور زیر استفاده می شود.
ALTER TABLE cycling.cyclist_alt_stats
ALTER birthday TYPE blob;
برای اضافه کردن ستون از دستور زیر استفاده می شود.
ALTER TABLE cycling.cyclist_races
ADD firstname text;
ALTER TABLE cycling.upcoming_calendar
ADD events list<text>;
برای حذف یک ستون از دستور زیر استفاده می شود.
ALTER TABLE cycling.basic_info
DROP birth_year;
برای ویرایش پراپرتی های جدول از دستور زیر استفاده می شود.
ALTER TABLE cyclist_my
WITH comment = ‘ ID , name , birthdate and country ’
AND read_repair_chance = 0.2;
برای مشخص کردن نوع فشرده سازی از دستور زیر استفاده می شود
ALTER TABLE cycling_comments
WITH compression = { ‘ sstable_copression ’ : ‘ DeflateCompressor ’ , ‘ chung_lenght_kb ’ : 64 };
برای تغییرات کشینگ جداول از دستور زیر استفاده می شود.
ALTER TABLE cycling.events
WITH caching = { ‘ keys ’ : ‘ NONE ’ , ‘ rows_per_partition ’ : 10 };
دستور زیر یک جدول را حذف میکند. هنگام حذف یک جدول تمامی داده های مربوط به جدول از داخل Keyspace حذف خواهد شد.
قبل از حذف جدول، کاساندرا یک snapshot از دیتا به عنوان پشتیبان تهیه میکند ولی باید دقت داشته باشید که از schema پشتیبانی تهیه نمیشود.
DROP TABLE table_name
برای حذف اطلاعات داخل یک جدول از دستور زیر استفاده می شود. اجرای این دستور باعث حذف دائمی تمامی سطر های جدول می شود. این دستور ساختار جدول را حذف نمیکند و در اینجا کاساندرا یک snapshot از دیتا به عنوان پشتیبان تهیه میکند.
TRUNCATE TABLE table_name
محدودیت های دستور ALTER TABLE
امکان تغییر Primary Key در کاساندرا وجود ندارد.
امکان تغییر فیلد های جداولی که materialized view هستند وجود ندارد.
امکان تغییر کالکشن ها وجود ندارد. ( لیست ها ، مجموعه ها و مپ ها ).
تغییر Column Family ها پیشنهاد نمی شود.
از دستور زیر برای ایجاد Keyspace استفاده می شود. به حروف بزرگ و کوچک دقت کنید کاساندرا به حروف بزرگ یا کوچک حساس است.
CREATE KEYSPACE Keyspace_name
WITH REPLICATION = { ‘ class ’ : ‘ SimpleStrategy ’ , ‘ replication_factor ’ : 3 }
از دستور زیر برای گرفتن لیست Keyspace های موجود استفاده می شود.
DESCRIBE KEYSPACES
اگر بخواهیم اطلاعات مربوط به یک Keyspace را فراخوانی شود از دستور DESCRIBE همراه با نام Keyspace مورد نظر استفاده میشود.
DESCRIBE Keyspace_name
از دستور زیر برای تغییر مشخصات Keyspace استفاده می شود.
ALTER KEYSPACES Keyspace_name
WITH REPLICATION = { ‘ class ’ : ‘ SimpleStrategy ’ , ‘ replication_factor ’ : 2 }
از دستور زیر برای حذف یک Keyspace استفاده می شود.
DROP KEYSPACES Keyspace_name
برای ایجاد جدول از دستور زیر استفاده می شود. ابتدا باید مشخص شود که در کدام Keyspace باید جدول ایجاد شود.خط اول این کار را انجام می دهد و سپس دستور ایجاد جدول و لیست فیلد های مورد نیاز وارد میشود.
USE Keyspace_name
CREATE TABLE table_name(
Id int PRIMARY KEY,
Name varchar,
City varchar,
Phone int,
Salary int);
برای گرفتن لیست جداول از دستور زیر استفاده میشود.
DESCRIBE TABLES
برای گرفتن اطلاعات یک جدول از دستور زیر استفاده میشود همراه با نام جدول
DESCRIBE table_name