Все, что было сказано, верно.
- На основе вашей модели данных по вашим запросам
- DS2020 на academy.datastax.com - полный курс, объясняющий, как это сделать.
Сейчас Что касается вашего примера чата, вот несколько предложений
DROP TABLE IF EXISTS sample_chat;
CREATE TABLE IF NOT EXISTS sample_chat (
fromuser text,
touser text,
message_id timeuuid,
body text,
PRIMARY KEY ((fromuser, touser), message_id)
) WITH CLUSTERING ORDER BY (msg_time DESC);
INSERT INTO sample_chat(fromuser, touser, message_id, body) VALUES('Cedrick', 'Hasan', now(), 'Hi Hasan do you like Cassandra');
INSERT INTO sample_chat(fromuser, touser, message_id, body) VALUES('Hasan', 'Cedrick', now(), 'Yeah Cassandra rocks');
INSERT INTO sample_chat(fromuser, touser, message_id, body) VALUES('Cedrick', 'Hasan', now(), 'Take ds220 and give us some feedback');
select fromuser, touser, body from sample_chat;
Rational:
Вы хотите получить чат на основе fromuser
и touser
, и поэтому хороший ключ раздела. В чате между двумя пользователями не должно быть более 100 000 строк, что является рекомендуемым максимальным количеством строк для раздела.
Вы хотите, чтобы ваши элементы были упорядочены по времени с последним в начале (дисплей только последние сообщения в чате). Вы хотите, чтобы ваши сообщения были уникальными. Таким образом, timeuuid
является хорошим типом для message_id
, вы можете легко извлечь из него время и обеспечить уникальность.
Вы хотите не использовать time
в качестве имени столбца или любой термин, который сталкивается с существующим ключевым словом cql.