es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Búsqueda por carácter ordenado por valor en Cassandra

Búsqueda por carácter ordenada por valor en Cassandra:

Actualmente estoy en el proceso de dominar Cassandra con un primer proyecto. Este es una red social. Estoy trabajando en la barra de búsqueda para encontrar usuarios en la red. Estoy buscando la mejor organización de la base de datos, así como el mejor comando CQL para recuperar una lista de 5 usuarios a partir de un puntaje (flotante en orden descendente) y el primer carácter del seudónimo que el usuario ingresó. Aquí está mi idea para organizar la tabla de Cassandra

CREATE TABLE user_classement (id int, user_name set<text>, score float,PRIMARY KEY(id, score))WITH CLUSTERING ORDER BY (score DESC) ;
create index on user_classement  (user_name);

Aquí está mi idea para organizar la tabla de Cassandra

INSERT INTO user_classement(id, user_name, score) VALUES (678, {'j', 'je', 'jes', 'jesv', 'jesve'}, 89,6);

El problema es que esta organización no está optimizada en absoluto y no funciona con un comando CQL contains.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para buscar por carácter ordenado por valor en Cassandra, sugeriría modificar el esquema de la tabla para incluir una nueva columna para almacenar el primer carácter del user_name.

    Aquí tienes el esquema de la tabla actualizado y la consulta de inserción de datos de muestra:

    CREATE TABLE user_classement (
        id int,
        user_name set<text>,
        score float,
        first_char text,
        PRIMARY KEY(id, score)
    ) WITH CLUSTERING ORDER BY (score DESC);
    
    INSERT INTO user_classement(id, user_name, score, first_char) 
    VALUES (678, {'j', 'je', 'jes', 'jesv', 'jesve'}, 89.6, 'j');
    

    Para recuperar una lista de 5 usuarios a partir de una puntuación y un primer carácter específicos, puedes utilizar la siguiente consulta de CQL:

    SELECT id, user_name, score 
    FROM user_classement 
    WHERE score <= 90.0 AND first_char = 'j'
    LIMIT 5;
    

    Esta consulta busca usuarios con puntuaciones menores o iguales a 90.0 y cuyos user_name comienzan con ‘j’. Limita el conjunto de resultados a 5 usuarios.

    Ten en cuenta que he usado <= en la cláusula WHERE para incluir usuarios con el valor exacto de puntuación especificado. Puedes ajustar esto según tus requerimientos.

    Además, ten en cuenta que los índices secundarios (como el que intentaste crear en user_name) pueden afectar al rendimiento y se deben utilizar con prudencia. En este caso, la adición de la columna first_char a la clave primaria nos permite buscar eficientemente usuarios por su carácter inicial, sin necesidad de un índice.

    ¡Espero que esto te ayude a optimizar tu esquema de Cassandra y obtener los resultados de búsqueda deseados!

Comments are closed.