Apache Cassandra. Первичные ключи и особенности хранения записей

Cassandra_logoПри оперировании данными минимальной структурной единицей является запись. Не набор колонок или единственная колонка, а именно запись. На запись указывает её ключ, уникальный в рамках колоночного семейства (аналог таблицы в реляционной СУБД). Исходя из ключа записи определяется маркер (маркером будет результат хэш-функции, для которой входной параметр — ключ записи), а уже отталкиваясь от значения маркера СУБД понимает на какой узел/узлы нужно поместить всю запись целиком.

Partition key

В СУБД Cassandra ключ записи — первичный ключ колоночного семейства. Первичный ключ определяется на этапе инструкции создания колоночного семейства, например 1(нужно сразу оговориться, что синтаксис очень похож на традиционный для реляционных СУБД):

CREATE TABLE object_coordinates (
object_id int PRIMARY KEY,
coordinate text
);

object_coordinates — имя колоночного семейства (таблица с координатами объекта);

object_id — идентификатор объекта;

coordinate — координаты объекта

В примере выше представлен самый простой вариант первичного ключа. В пределах колоночного семейства запись уникально идентифицируется значением идентификатора объекта. Весь первичный ключ в этом примере будет являться ключом раздела (partition key), по которому Cassandra определит на каком узле/узлах будет храниться данная запись. Каждый раз как от одного и того же объекта будут приходить координаты, запись будет обновляться, поскольку идентификатор объекта не изменяется. Таким образом будут храниться только последние координаты объекта.

simple primary key

Логическое представление будет выглядеть примерно так:

cassandra primary key

В поле значения столбца Value будет имя пользователя; Timestamp — метка времени, по которой СУБД определит самую новую запись у всех имеющихся узлов, если данные вдруг будут рассинхронизированы.

А вот пример с реальными данными:

cassandra primary key example

Значение Timestamp выставлено как пример.

Compound primary key & Clustering key

А что если нужно сохранять вообще всю историю координат? С помощью рассмотренного примера это сделать не получится, поскольку старые координаты каждый раз затираются новыми, если конечно же новые координаты поступают. Для реализации возможности хранения всей истории координат нужно несколько усложнить пример:

CREATE TABLE object_coordinates (
object_id int,
time timestamp,
coordinate text,
PRIMARY KEY (object_id, time)
);

Добавим дополнительную колонку time, которая будет хранить время прихода координат, и используем её в primary key. Таким образом мы получили составной первичный ключ (compound primary key). Состоит этот ключ из ключа раздела (partition key) и ключа группировки (clustering key). Ключ раздела всегда является значением до первой запятой, все что идет далее — ключ группировки:

compound primary key

Поскольку теперь первичный ключ будет идентифицироваться двумя полями, то если хотя бы одно из них отличается, то фактически это уже должна быть другая запись. Но на самом деле ситуация будет немного сложнее: если ключ раздела будет у двух записей один и тот же, а ключ группировки отличаться, то это в итоге будет одна  большая запись, но состоящая из двух. Лучше всего это объяснить с помощью рисунка:

compound primary key example

Главное отличие от простого первичного ключа состоит в том, что записи с отличающимися значениями ключа группировки добавляются к существующей записи с идентичным ключом. Записи упорядочены по ключу группировки и по ним может осуществляться поиск. Наш пример в данном случае будет выглядеть так (добавим несколько значений, чтобы иллюстрация была более наглядной):

cassandra primary key example 2

Вторая запись также будет дополняться данными по мере поступления новых координат от объекта с соответствующим идентификатором.

Composite partition key

В предыдущем примере мы добились того, что СУБД будет хранить всю историю изменения координат объекта (правда стоит оговориться, что формат Timestamp хранит данные с точностью до одной секунды, поэтому если у вас за одну секунду успели прийти несколько координат объекта, то они перезатрутся и в базе будет лишь последнее значение за секунду. Однако выявленный недостаток не помешает выполнить основное назначение примера — наглядно продемонстрировать структуру первичных ключей). Однако тут нас ждет один неприятный сюрприз — мы можем наткнуться на ограничение 2 СУБД по максимальному количеству ячеек (rows*columns) в 2 млрд.

Это ограничение ставит под угрозу сохранение всей истории координат объекта, поскольку после достижения предела данные перестанут записываться. Решение есть и оно заключается в использовании комбинированного ключа раздела (composite partition key), суть которого в использовании нескольких колонок для образования ключа раздела. Изменим наш пример соответственным образом:

CREATE TABLE object_coordinates (
object_id int,
date text,
time timestamp,
coordinate text,
PRIMARY KEY ((object_id, date), time)
);

Необходимо добавить дополнительную колонку, в моем случае я выбрал дату, и добавить её в ключ раздела, обозначив скобками. Таким образом, если мы будем иметь различные значения хотя бы одного значения в ключе раздела — object_id или date — то по сути это будет уже другой раздел и для него ограничение в 2 млрд. обнулится, что нам и нужно. Рассмотрим подробнее:

compound primary key with composite part key

Фактически мы теперь имеем составной первичный ключ с комбинированным ключом раздела и ключом группировки.

Логическое представление данных тоже несколько усложнится:

compound primary key + comp key example

В соответствии с этой логикой наш пример будет выглядеть следующим образом:

cassandra primary key example 3

На этом я заканчиваю обзор строения и вариаций первичного ключа в СУБД Cassandra. В сети не так много информации по поводу этого вопроса, но все же встречается ряд обзоров 3 4 (хоть и не из официальных ресурсов), которые неплохо описывают большинство нюансов. Особенно мне помогла статья 5 от Patrick McFadin.

comments powered by HyperComments
1tibetan
2022-07-04 22:05:55
<strong>3hampshire</strong>
dissertation help near me
2022-07-05 16:00:00
<strong>dissertation editing help https://professionaldissertationwriting.org/</strong>
dissertation express
2022-07-05 18:50:36
<strong>dissertation acknowledgement sample https://professionaldissertationwriting.com/</strong>
best dissertation help services
2022-07-05 23:46:37
<strong>buy dissertation online https://dissertationwritingcenter.com/</strong>
phd thesis
2022-07-06 02:50:21
<strong>thesis vs dissertation https://dissertationhelpexpert.com/</strong>
acknowledgements dissertation
2022-07-06 04:52:53
<strong>dissertation proposal writing services https://accountingdissertationhelp.com/</strong>
doctoral dissertation help thesis
2022-07-06 07:14:23
<strong>cheap dissertation writing https://examplesofdissertation.com/</strong>
dissertation writing advice
2022-07-06 12:51:12
<strong>books thesis dissertation help https://bestdissertationwritingservice.net/</strong>
dissertation writing guide
2022-07-06 14:18:32
<strong>dissertation writing and editing https://businessdissertationhelp.com/</strong>
top servis
2022-07-06 17:10:44
<strong>dissertation writing advice https://customdissertationwritinghelp.com/</strong>
writing phd dissertation
2022-07-06 21:24:14
<strong>write my dissertation for me https://writingadissertationproposal.com/</strong>
writing a masters dissertation
2022-07-07 03:29:17
<strong>doctoral dissertation help usa https://dissertationhelperhub.com/</strong>
online casino poker
2022-07-25 18:52:18
<strong>snoqualmie casino online https://download-casino-slots.com/</strong>
best online casino slots
2022-07-25 21:44:55
<strong>online casino sweepstakes https://firstonlinecasino.org/</strong>
us casino online
2022-07-26 00:26:05
<strong>best online casino in canada https://onlinecasinofortunes.com/</strong>
online casino testen
2022-07-26 03:23:04
<strong>online casino win real money https://newlasvegascasinos.com/</strong>
online casino signup bonus
2022-07-26 06:27:19
<strong>playnet.fun online casino https://onlinecasinosdirectory.org/</strong>
best canadian online casino
2022-07-26 10:15:44
<strong>casino online gratis https://9lineslotscasino.com/</strong>
bet mgm online casino
2022-07-26 13:17:01
<strong>casino online betting https://free-online-casinos.net/</strong>
unibet online casino pa
2022-07-26 15:30:37
<strong>nj online casino borgata https://internet-casinos-online.net/</strong>
best online casino deposit bonus
2022-07-26 18:31:44
<strong>legal online casino https://cybertimeonlinecasino.com/</strong>
newest online casino real money
2022-07-26 23:39:38
<strong>online casino real money cash app https://vrgamescasino.com/</strong>
casino games online
2022-07-27 02:58:30
<strong>real online casino usa https://casino-online-roulette.com/</strong>
online casino ny real money no deposit
2022-07-27 04:13:12
<strong>virginia online casino https://casino-online-jackpot.com/</strong>
no deposit online casino real money
2022-07-27 06:22:11
<strong>stardust casino online https://onlineplayerscasino.com/</strong>
pa borgata online casino
2022-07-27 12:34:34
<strong>bovada casino online https://all-online-casino-games.com/</strong>
msn games online casino
2022-07-27 15:18:18
<strong>best online casino slots https://casino8online.com/</strong>
should i buy a vpn
2022-08-07 14:28:57
<strong>international vpn service https://freevpnconnection.com/</strong>
fastest vpn
2022-08-07 18:12:51
<strong>how to use vpn https://shiva-vpn.com/</strong>
free avast vpn license key
2022-08-07 20:54:51
<strong>business vpn provider https://freehostingvpn.com/</strong>
is avast vpn any good
2022-08-07 21:25:01
<strong>free vpn to change location https://ippowervpn.net/</strong>
buy hidemyass vpn
2022-08-08 01:12:24
<strong>free vpn ps4 https://imfreevpn.net/</strong>
get us vpn service
2022-08-08 02:26:11
<strong>best vpn service 2022 https://superfreevpn.net/</strong>
best free vpn for ipad
2022-08-08 05:17:36
<strong>proton vpn download https://free-vpn-proxy.com/</strong>
which of the following statements about dating in gay male and lesbian youth is true?
2022-08-23 14:29:35
<strong>reviews of gay dating web sites https://gay-singles-dating.com/</strong>
ther gay dating game
2022-08-23 16:08:57
<strong>dating an hib positive gay man https://gayedating.com/</strong>
gay bear dating
2022-08-23 19:45:16
<strong>gay tiny micro dick dating https://datinggayservices.com/</strong>
zoosk dating site
2022-08-24 13:43:13
<strong>erotic dating sites https://freephotodating.com/</strong>
pof dating login
2022-08-24 16:00:25
<strong>which online dating site is best https://onlinedatingbabes.com/</strong>
dating sites for free
2022-08-24 17:29:29
<strong>free date web sites https://adult-singles-online-dating.com/</strong>
women dates local no fee
2022-08-24 20:51:42
<strong>dating dating https://adult-classifieds-online-dating.com/</strong>
dating direct
2022-08-24 23:08:07
<strong>free dating without registration https://online-internet-dating.net/</strong>
find my dating
2022-08-25 01:21:19
<strong>match single https://speedatingwebsites.com/</strong>
local dating sites absolutely free
2022-08-25 02:42:46
<strong>mature nl free https://datingpersonalsonline.com/</strong>
single web site
2022-08-25 04:36:57
<strong>amature dating co https://wowdatingsites.com/</strong>
plenty of fish dating site
2022-08-25 09:21:11
<strong>free websites to meet single women https://freeadultdatingpasses.com/</strong>
zoosk dating site
2022-08-25 11:13:06
<strong>datiing websites https://virtual-online-dating-service.com/</strong>
top date sites
2022-08-25 14:37:50
<strong>dating agency login https://zonlinedating.com/</strong>
online casino vegas
2022-08-30 09:38:45
<strong>mgm casino online nj https://onlinecasinos4me.com/</strong>
big dollar online casino
2022-08-30 11:36:19
<strong>red dog online casino https://online2casino.com/</strong>
gay sex chat
2022-09-02 23:08:03
<strong>x4 gay video chat https://newgaychat.com/</strong>
gay chat text
2022-09-03 07:36:30
<strong>mature gay chat app https://gaychatcams.net/</strong>
gay chat city
2022-09-03 11:33:25
<strong>free bi gay chat sites seattle wa https://gaychatspots.com/</strong>
gay video chat sites
2022-09-03 20:10:39
<strong>m4m chat phone free rochester ny gay https://chatcongays.com/</strong>
gay chat tucson
2022-09-04 03:37:51
<strong>gay danish english chat rooms https://gayphillychat.com/</strong>
gay chat cam ramdoom
2022-09-04 08:20:45
<strong>chat avenue gay chat room https://gaychatnorules.com/</strong>
gay chat no registration
2022-09-04 11:32:40
<strong>chat avenue gay chat https://gaymusclechatrooms.com/</strong>
random gay video chat
2022-09-04 16:50:55
<strong>chat ave gay chat https://free-gay-sex-chat.com/</strong>
live gay webcam chat rooms
2022-09-04 20:41:01
<strong>gay teen cam chat room https://gayinteracialchat.com/</strong>
gay zoom webcam chat
2022-10-20 17:08:58
<strong>new york gay chat lines https://gaymanchatrooms.com/</strong>
buy a literature review paper
2022-10-20 19:57:46
<strong>best paper writing service https://sociologypapershelp.com/</strong>
professional college paper writers
2022-10-20 21:24:06
<strong>where can i find someone to write my paper https://uktermpaperwriters.com/</strong>
pay to write a paper
2022-10-20 22:20:27
<strong>who can write my paper for me https://paperwritinghq.com/</strong>
help writing a paper for college
2022-10-21 02:16:38
<strong>papers writing service https://doyourpapersonline.com/</strong>
custom papers writing
2022-10-21 04:16:06
<strong>custom note paper https://top100custompapernapkins.com/</strong>
do my college paper for me
2022-10-21 05:30:59
<strong>writing paper services https://researchpaperswriting.org/</strong>
finished custom writing paper
2022-10-21 06:26:47
<strong>cheapest paper writing service https://cheapcustompaper.org/</strong>
websites to type papers
2022-10-21 08:02:54
<strong>college paper writing help https://writingpaperservice.net/</strong>
someone write my paper for me
2022-10-21 09:25:04
<strong>who can write my paper https://buyessaypaperz.com/</strong>
do my paper for me
2022-10-21 10:10:40
<strong>someone write my paper https://mypaperwritinghelp.com/</strong>
paper writing service superiorpapers
2022-10-21 11:49:23
<strong>where can i find someone to write my paper https://writemypaperquick.com/</strong>
order a paper
2022-10-21 13:04:36
<strong>customized paper https://essaybuypaper.com/</strong>
best write my paper website
2022-10-21 14:45:07
<strong>who can write my paper https://papercranewritingservices.com/</strong>
write my paper for me in 3 hours
2022-10-21 15:38:51
<strong>buy custom papers https://premiumpapershelp.com/</strong>
college paper service
2022-10-21 17:11:33
<strong>buy cheap paper online https://ypaywallpapers.com/</strong>
Яндекс.Метрика