modelo - Cuenta de modelado para comunicación de descanso cassandra
historia de cassandra db (1)
Puedo crear una tabla más donde el correo electrónico será particionado por access_token, pero eso me parece una sobrecarga y muchas particiones.
¿Qué pasa con una gran cantidad de particiones en una tabla? Definitivamente es una forma correcta de hacer las cosas en Casandra:
create table users (
email text primary key,
first_name text,
last_name text,
current_token text
);
create table tokens (
auth_token text primary key,
valid_until timestamp,
email text
);
Por lo tanto, tiene tablas separadas para los usuarios y la tabla de tokens
que tiene token como clave de partición. Con este modelo puedes:
- establecer un nuevo token para un usuario actualizando users.current_token con TTL e insertando una nueva fila de
tokens
tabla detokens
. - obtener el correo electrónico del usuario por token, incluso si el token ha caducado.
- obtener el token activo del usuario actual
- tener un historial completo de tokens para un usuario (pero no hay manera de ejecutar consultas efectivas para ese tipo de información, puedes usar Spark / SparkSQL / Hive para eso).
- expiran automáticamente los tokens configurando TTL para una sola columna
current_token
.
Necesito modelar la cuenta (nombre, apellido, correo electrónico como nombre de usuario, etc.) en cassandra junto con el token actualmente activo.
Mi idea inicial fue crear account_by_email
que tendrá una fila flaca dividida por correo electrónico con columnas estáticas y tendrá clustering por access_token
(y quizás TTL) y que siempre podrá encontrar el token de acceso basado en el correo electrónico actual.
Pero tenemos un requisito que los clientes envíen después de iniciar sesión solo access_token
y, en base a él, el usuario actual debe extraerse de DB.
Puedo crear una tabla más donde el correo electrónico será particionado por access_token
pero eso me parece una sobrecarga y muchas particiones. Luego podría obtener el correo electrónico de access_token
y obtener el usuario por correo electrónico siempre.
¿Alguna idea y enfoque mejores, ve que este es un caso de uso común pero no puedo encontrar ningún detalle de modelado cuando cassandra se usa como almacenamiento?