Sou novo no Cassandra e estou tendo problemas para tentar descobrir como ordenar meus dados. Estou tentando gravar mensagens do twitch.tv para cada streamer. Eu quero algo como o seguinte
CREATE TABLE IF NOT EXISTS chat_data.twitch_chat_by_broadcaster_and_timestamp (
broadcaster_id int,
timestamp int,
message text,
PRIMARY KEY (broadcaster_id, timestamp)
) WITH CLUSTERING ORDER BY (timestamp DESC);
Embora não seja um problema para um projeto de hobby, como você resolve o problema de duas mensagens serem enviadas exatamente ao mesmo tempo. Estou ciente do TimeUUID
, mas quero que as mensagens sejam classificadas pelo carimbo de data e hora de quando foram enviadas, e não parece que existam maneiras oficiais de criar um arquivo TimeUUID
diferente do now()
.
Prevejo usar esse banco de dados para obter todas as mensagens em um determinado intervalo de tempo para um determinado fluxo. Sei que poderia adicionar outro UUID
campo para garantir a exclusividade, mas isso atrapalharia minha consulta, pois preciso especificar um horário exato.
Qual é a maneira correta de ordenar esses dados para permitir consultas eficientes?
Não se você a adicionou como a última coluna de cluster:
Dessa forma, você poderia simplesmente gerar um novo UUID no momento da gravação. Contanto que você consulte a chave de partição de
broadcaster_id
, os dados ainda serão classificados por (ambos)timestamp
, commessage_id
adição para garantir a exclusividade.Pelo que posso ver, a consulta de mensagens por
broadcaster_id
não muda: