2016-12-21 4 views
-2

Сообщение protopuf 'sessionproto', которое я получаю, имеет поле, которое является рекурсивным.Модель данных в Кассандре для рекурсивной структуры

itemrelationproto ссылки itemgroupproto и itemgroupproto ссылки itemrelationproto.

Как определить модель данных в Кассандре для хранения этих данных?

Спасибо.

message itemrelationproto { 
    optional string id = 1; 
    optional itemgroupproto itemgroup = 2; 
} 

message itemgroupproto { 
    optional string id = 1; 
    optional string displayname = 2; 
    repeated itemrelationproto itemrelations = 3; 
} 

message sessionproto { 
    optional string sessionid = 1; 
    optional string displayname = 3; 
    repeated itemrelationproto itemrelations = 4; 
} 

create type itemrelationproto (
id text, 
itemgroup frozen<itemgroupproto> 
); 

create type itemgroupproto (
id text, 
displayname text, 
itemrelations set<frozen<itemrelationproto>> 
); 

create table sessionproto (
sessionid text, 
displayname text, 
itemrelations set<frozen<itemrelationproto>, 
primary key (sessionid) 
); 
+0

Вы можете преобразовать свои сообщения protobuf в байтовые массивы и сохранить их как blob внутри cassandra. –

ответ

1

Cassandra не является реляционной базой данных, так как вы не можете хранить предметы, которые ссылаются друг на друга. Таким образом, в Кассандре нет возможности сделать рекурсию.

Но вы пытаетесь определить тип, рекурсивный, что в настоящее время невозможно. Решение, которое я предлагаю, состоит в том, чтобы преобразовать ваш proto в массив байтов или json или что-то еще и сохранить его в поле text или blob. Другим решением является создание нескольких таблиц и сохранение каждого сообщения отдельно, но вам потребуется несколько запросов для выбора всего sessionproto.

+0

Спасибо DineMartine. Я ценю ваш ответ. Это то, что я имел в виду, но хочу изучить все возможности и убедиться, что я направляюсь в правильном направлении. – shylas

2

Моделирование данных в Кассандре - это не объекты, которые вы хотите сохранить, а запросы, которые вы хотите выполнять на своих данных.

Следующие ссылки могут быть полезны:

Это заявление с поста блога выше подводит итог очень хорошо:

Не модель вокруг отношений. Не моделируйте объекты. Модель вокруг ваших запросов.

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

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