Ho progettato seguente tabella per gli allarmi negozio di server:tavoli modellazione Cassandra per upsert e query di selezione
create table IF NOT EXISTS host_alerts(
unique_key text,
host_id text,
occur_time timestamp,
clear_time timestamp,
last_occur timestamp,
alarm_name text,
primary key (unique_key,host_id,clear_time)
);
Entriamo alcuni dati:
truncate host_alerts;
insert into host_alerts(unique_key,host_id,alarm_name,
clear_time,occur_time,last_occur
)
values('1','server-1','disk failure',
'1970-01-01 00:00:00+0530','2015-07-01 00:00:00+0530','2015-07-01 00:01:00+0530');
insert into host_alerts(unique_key,host_id,alarm_name,
clear_time,occur_time,last_occur
)
values('1','server-1','disk failure',
'1970-01-01 00:00:00+0530','2015-07-01 00:00:00+0530','2015-07-01 00:02:00+0530');
insert into host_alerts(unique_key,host_id,alarm_name,
clear_time,occur_time,last_occur
)
values('1','server-1','disk failure',
'2015-07-01 00:02:00+0530','2015-07-01 00:00:00+0530','2015-07-01 00:02:00+0530');
La query mia applicazione sarà in esecuzione sono:
//All alarms which are **not cleared** for host_id
select * from host_alerts where host_id = 'server-1' and clear_time = '1970-01-01 00:00:00+0530';
//All alarms which are cleared for host_id
select * from host_alerts where host_id = 'server-1' and clear_time > '2015-07-01 00:00:00+0530';
//All alarms between first occurrence
select * from host_alerts where host_id = 'server-1'
and occur_time > '2015-07-01 00:02:00+0530'and occur_time < '2015-07-01 00:05:00+0530';
Non so se dovrei preparare altro esempio di tabella: host_alerts_by_hostname o host_alerts_by_cleartime e così via o semplicemente aggiungere indice di clustering. Come ID univoco è l'unica colonna unica, ma ho bisogno di retrive i dati da altra colonna
allarmi non compensati: '1970-01-01 00: 00: 00 + 0530' evento eliminato ha una data valore.
HOST_ID è il nome del server
occur_time è quando l'evento si è verificato.
last_occur è l'ora in cui l'evento si ripresenta nuovamente.
alarm_name è ciò che è successo con il sistema.
Come posso modellare la tabella in modo che sia possibile eseguire queste query e aggiornare in base a unique_id? Con quello che ho provato selezionare non è possibile e durante upsert viene creata una nuova riga per lo stesso unique_key.
grazie per la bella risposta unique_key è la chiave casuale generata in rdbms. cassandra ha funzionalità per replicare automaticamente i dati tra le tabelle? Devo controllare ogni volta il campo clear_time, non rallenterà le prestazioni? Inoltre, terzo penso che vuoi dire occurr_time ?? – kinkajou
Come faccio questo per 100-1000 allarmi al secondo? – kinkajou
Cassandra 3.0 supporta le visualizzazioni materializzate per propagare i dati da una tabella a un'altra, ma quella versione non sarà disponibile per un po 'di tempo. Non capisco cosa intendi per controllare ogni volta clear_time. Si vuole evitare di fare una lettura prima di scrivere in Cassandra poiché ridurrà notevolmente il throughput delle transazioni. –