ventajas tutorial sintaxis modelo desventajas datos crear comandos cassandra cassandra-2.0

tutorial - modelo de datos cassandra



modelado de tablas de cassandra para la consulta de selección y selección (1)

He diseñado la siguiente tabla para almacenar alarmas de servidor:

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) );

Ingresemos algunos datos:

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 consulta que mi aplicación se ejecutará es:

//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'';

No sé si debería preparar más ejemplo de tabla: host_alerts_by_hostname o host_alerts_by_cleartime y así sucesivamente o simplemente agregar el índice de clúster. Como la identificación única es la única columna única, pero necesito recuperar los datos de otra columna

Alarmas no borradas: el evento borrado ''1970-01-01 00: 00: 00 + 0530'' tiene algún valor de fecha.

host_id es el nombre del servidor

occur_time es cuando se ha producido el evento.

last_occur es el momento en que el evento volvió a ocurrir.

alarm_name es lo que ha sucedido con el sistema.

¿Cómo puedo modelar mi tabla para que pueda realizar estas consultas y actualizar en base a unique_id? Con lo que he intentado, seleccionar no es posible y durante la inserción se crea una nueva fila para la misma clave única.


Creo que probablemente necesite tres tablas para respaldar sus tres tipos de consultas.

La primera tabla admitiría consultas de rango de tiempo sobre el historial de cuándo ocurrieron las alertas para cada host:

CREATE TABLE IF NOT EXISTS host_alerts_history ( host_id text, occur_time timestamp, alarm_name text, PRIMARY KEY (host_id, occur_time) ); SELECT * FROM host_alerts_history WHERE host_id = ''server-1'' AND occur_time > ''2015-08-16 10:05:37-0400'';

La segunda tabla mantendría un registro de las alarmas no cerradas para cada host:

CREATE TABLE IF NOT EXISTS host_uncleared_alarms ( host_id text, occur_time timestamp, alarm_name text, PRIMARY KEY (host_id, alarm_name) ); SELECT * FROM host_uncleared_alarms WHERE host_id = ''server-1'';

La última tabla mantendría un registro de cuándo se borraron las alertas para cada host:

CREATE TABLE IF NOT EXISTS host_alerts_by_cleartime ( host_id text, clear_time timestamp, alarm_name text, PRIMARY KEY (host_id, clear_time) ); SELECT * FROM host_alerts_by_cleartime WHERE host_id = ''server-1'' AND clear_time > ''2015-08-16 10:05:37-0400'';

Cuando llega un nuevo evento de alarma, debe ejecutar este lote:

BEGIN BATCH INSERT INTO host_alerts_history (host_id, occur_time, alarm_name) VALUES (''server-1'', dateof(now()), ''disk full''); INSERT INTO host_uncleared_alarms (host_id, occur_time, alarm_name) VALUES (''server-1'', dateof(now()), ''disk full''); APPLY BATCH;

Tenga en cuenta que la inserción en la tabla no eliminada es una inserción, ya que la marca de tiempo no es parte de la clave. Entonces esa tabla solo tendrá una entrada para cada nombre de alarma con una marca de tiempo de la última ocurrencia.

Cuando llega un evento de desactivación de alarma, debe ejecutar este lote:

BEGIN BATCH DELETE FROM host_uncleared_alarms WHERE host_id = ''server-1'' AND alarm_name = ''disk full''; INSERT INTO host_alerts_by_cleartime (host_id, clear_time, alarm_name) VALUES (''server-1'', dateof(now()), ''disk full''); APPLY BATCH;

Realmente no entendí cuál es tu "unique_key" ni de dónde viene. No estoy seguro de que sea necesario, ya que la combinación de host_id y alarm_name debe ser el nivel de granularidad con el que desea trabajar. Agregar otra clave única en la mezcla podría dar lugar a una gran cantidad de eventos de alerta / borrar incomparables. Si unique_key es una identificación de alarma, utilícela como la clave en lugar de alarm_name en mi ejemplo y tenga alarm_name como columna de datos.

Para evitar que sus tablas se llenen a lo largo del tiempo con datos antiguos, puede usar la función TTL para eliminar filas automáticamente después de varios días.