2016-04-14 3 views
0

У меня есть эта схема, чтобы хранить post и его комментарий вместе в одной таблице:Плюсы и минусы данной Кассандры схемы

CREATE TABLE post ( 
    post_id int, 
    access_key text, 
    comment_id int, 
    title text, 
    comments FROZEN <type_comment>, 
    PRIMARY KEY ((post_id, access_key), comment_id) 
); 

CREATE TYPE ks_test.type_comment (
    id int, 
    content text 
); 

здесь образец данных

post_id | access_key | comment_id | comments     | title 
---------+------------+------------+--------------------------+-------------- 
     1 | about_post |   1 |      null | this is post 
     1 | comments |   2 | {id: 2, content: 'cmn1'} |   null 
     1 | comments |   3 | {id: 3, content: 'cmn2'} |   null 
     1 | comments |   4 | {id: 4, content: 'cmn3'} |   null 

Я использую эту схему, так что я должен получить доступ только к одной таблице, чтобы получить post и ее комментарий. Каковы будут профи & минусов этой схемы?

ответ

2

Действительно, это нормально и будет работать, если вы сможете выяснить, как заполнить поля id.

Я думаю, что comment_id и id в type_comment является избыточным. Может заменить всю колонку comments на content.

Лично я бы заменил post_id временным uuid, так как в Cassandra нет идентификатора автоматической инкреции. Автоматическое увеличение уникальных уникальных идентификаторов в распределенной среде затруднено. Есть некоторые вещи, чтобы сделать это для вас, но на самом деле, просто использование времени uuid/random uuid является самым простым.

CREATE TABLE post ( 
    post_id uuid, 
    access_key text, 
    comment_id timeuuid, 
    title text, 
    content text, 
    PRIMARY KEY ((post_id, access_key), comment_id) 
); 

Если хочет, чтобы захватить его по дате можно сделать что-то вроде

CREATE TABLE post ( 
    year int, 
    month int, 
    access_key text, 
    comment_id timeuuid, 
    title text, 
    content text, 
    PRIMARY KEY ((access_key, year, month), comment_id) 
); 

, то вы можете получить за месяцем, а также может использовать диапазоны, чтобы захватить в периоды месяца. Также можно сделать «time_bucket» для замены года/месяца как строки времени iso, например «2016-01-01 00:00:00», чем вы можете легче изменить брокер (т.е. месяцы, дни и т. Д.).

+0

Что я хотел знать здесь? в некоторой строке будет значение столбца «null», как вы можете видеть на выходе, поэтому число записей будет увеличиваться, и это значение будет также увеличиваться. Это проблема? – manish

+1

должны быть установлены только ключи раздела/кластеризации (без материализованного представления/индексации на других), отсутствие других просто означает меньшее использование дискового пространства. –

+0

На ваш взгляд, какие плюсы и минусы этого подхода схемы? – manish

Смежные вопросы