¿Qué base de datos para almacenar y consultar tuplas enteras con alto rendimiento?

Me gustaría almacenar varios miles de eventos por segundo en una base de datos. Los eventos provienen de Kafka (es decir, se pueden agrupar por lotes) y constan de 5 enteros de 64 bits cada uno. Uno de esos 5 valores es una marca de tiempo. La retención prevista es de unos 2 meses.

Un esquema SQL adecuado (solo para mostrar la estructura) podría verse así:

CREATE TABLE entities (a INT NOT NULL,
                       b INT NOT NULL,
                       c INT NOT NULL,
                       d INT NOT NULL,
                       ts INT NOT NULL);

CREATE INDEX a_idx ON entities (a);
CREATE INDEX b_idx ON entities (b);
CREATE INDEX c_idx ON entities (c);

CREATE INDEX ts_idx ON entities (ts);

Los índices se generan porque la base de datos necesita responder unas miles de consultas por segundo como las siguientes:

SELECT * FROM entities WHERE a = 1234567;
SELECT * FROM entities WHERE b = 2345678;
SELECT * FROM entities WHERE c = 3456789;

La base de datos debe distribuirse (escalándose horizontalmente) y tolerar fallas en los nodos. Lo ideal sería que fuera de código abierto.

Hice algunos experimentos con CockroachDB, pero no logré el rendimiento de inserción necesario cuando la tabla creció con él.

Mis pruebas con MongoDB mostraron inserciones lo suficientemente rápidas pero consultas lentas.

Con respecto a las bases de datos similares a Cassandra: ScyllaDB cumple con los requisitos de rendimiento, pero el mantenimiento manual de varias tablas (para una búsqueda rápida por clave de partición) me parece una solución subopcional.

¿Existe quizás alguna base de datos de propósito especial no tan conocida que se ajuste perfectamente a mi caso de uso que recomendaría?

Respuestas (1)

En caso de que alguien tropiece con esta pregunta y quiera saber: decidí usar ScyllaDB.