Mam zaprojektowane poniższą tabelę do alarmów serwera sklep:modelowanie Cassandra stoły do upsert i kwerendy wybierającej
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)
);
Niech podać dane:
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');
Zapytanie moja aplikacja zostanie uruchomiony to:
//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';
Nie wiem, czy powinienem przygotować więcej przykładu tabeli: host_alerts_by_hostname lub host_alerts_by_cleartime i tak dalej lub po prostu dodać indeks klastrowania. jako unikatowy identyfikator jest tylko unikalna kolumna ale muszę sprowadzaniu dane z drugiej kolumny
nierozliczany Alarmy: „1970-01-01 00: 00: 00 + 0530” zdarzenie zdaje się ma jakąś datę wartość.
host_id jest nazwa serwera
occur_time jest, gdy zdarzenie wystąpiło.
last_occur to czas, kiedy wydarzenie ponownie się powtórzyło.
nazwa alarmu to, co się stało z systemem.
Jak mogę modelować moją tabelę, aby wykonać te zapytania i aktualizować na podstawie unique_id? Z tym, co próbowałem, wybierz nie jest możliwe i podczas upsert nowy wiersz jest tworzony dla tego samego unikalnego klucza.
dzięki za naprawdę fajną odpowiedź unique_key to losowy klucz generowany w rdbms. czy Kasandra ma funkcję automatycznego replikowania danych między tabelami? Za każdym razem muszę sprawdzać pole clear_time, czy nie spowolni to wydajności? Trzeci, myślę, że masz na myśli wystąpienie czasu? – kinkajou
Jak to zrobić dla 100-1000 alarmów na sekundę? – kinkajou
Cassandra 3.0 będzie obsługiwać zmaterializowane widoki w celu propagowania danych z jednej tabeli do drugiej, ale ta wersja nie będzie dostępna przez pewien czas. Nie rozumiem, co masz na myśli, sprawdzając za każdym razem "clear_time". Chcesz uniknąć czytania przed napisaniem w Cassandrze, ponieważ znacznie zmniejszy to wydajność transakcji. –