2016-11-24 1 views
1

Наличие большой связи OneToMany между A и B в RDB (около 1 < - 1 миллион).Каков наилучший способ сохранить большую ассоциацию OneToMany в Кассандре?

В деталях, является сохранением набора B, который должен быть постоянно слегка изменился из-за некоторые постоянная Промишленый-процесс. Некоторые из B могут быть добавлены, некоторые другие могут быть удалены. Важно иметь возможность выбирать B в виде страницы.

Из-за хранения данных миграции в Apache Cassandra, думая о модели данных для этих отношений.

Я предполагаю, что хорошее решение для этого будет магазин как строки, где столбцы являются identfies из B.

Колонка Семейство A:

A->{ 
RowID1->{description="...", BId0="123", BId1="456", ..., BId1000000="987"}, 
RowID2->{description="...", BId0="123", BId1="456", ..., BId500000="888"}, 
... 
} 

Это хороший способ сделать? Как его реализовать?

ответ

2

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

В CQL может быть реализована следующим образом:

CREATE TABLE b_by_a (a text, b text, description text, PRIMARY KEY (a, b)); 

Где и б является первичным ключом усугубляются из раздела ключа и кластером ключ б. Чтобы вставить, выбрать и удалить некоторые b вы должны знать a.

Insert INTO b_by_a (a, b, description) values ('value a', 'value b 1', '...'); 
Insert INTO b_by_a (a, b, description) values ('value a', 'value b 2', '...'); 

SELECT * FROM b_by_a WHERE a='value a'; 

Datastax драйвер Cassandra предоставляет возможность paging by query results

И обратите внимание на некоторые Кассандру limitations:

The maximum number of cells (rows x columns) in a single partition is 2 billion. 
Смежные вопросы