Nelson Ospina Taller 3 cassandra

NELSON OSPINA Taller entregable Descripción La red social Twitter puede ser entendida como una comunidad de usuarios que

Views 96 Downloads 2 File size 188KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

NELSON OSPINA Taller entregable Descripción La red social Twitter puede ser entendida como una comunidad de usuarios que siguen y son seguidos por otros usuarios. La relación de seguimiento no es simétrica, es decir, si un usuario A sigue a un usuario B , no implica que el usuario B siga al usuario A . Como parte de su sistema, Twitter Inc. permite al usuario seguir o dejar de seguir usuarios, consultar la lista de usuarios que sigue, consultar la lista de usuarios que lo siguen . Últimamente Twitter está contratando personal experto para mejorar su sistema de base de datos y como parte del proceso de entrevista te ha encargado la tarea de diseñar un modelo de datos en Cassandra que permita de manera eficiente realizar los siguientes patrones de acceso: Lecturas:  Listar usuarios que sigue el usuario X .  Determinar si un usuario X sigue al usuario Y .  Listar los usuarios que siguen al usuario X . Escrituras:  

Usuario X sigue un nuevo usuario Y . Usuario X deja de seguir a un usuario Y .

Entregables:    

Diagrama del modelo de datos Script de creación de datos Script con las operaciones de lectura y escritura. Nombre sus archivos con el apellido y su nombre y envielos por el link que se compartira por dropbox.

NELSON OSPINA Nelson Ospina Desarrollo:

Diagrama de datos Tendremos un KeySpace llamado Twitter dentro del cual se creará una tabla de usuarios con key usuario y dos listas: una de seguidores y otra de siguiendo, esto permitirá con una simple consulta obtener ambos listados, también CQL permite filtrar en cada lista KEYSPACE : TWITTER TABLA: USUARIOS Key: usuario @ Siguiendo A [B,C,D] B [E,F,G]

Seguidores [X,Y,Z] [A]

Script de creación de tablas: cqlsh> create KEYSPACE twitter WITH REPLICATION = {'class': 'SimpleStrategy','replication_factor':1}; cqlsh> USE twitter; cqlsh:twitter> CREATE TABLE usuarios (nombre varchar, seguidores list ,siguiendo list,PRIMARY KEY (nombre) );

Escrituras: 

Nace un nuevo usuario

cqlsh:twitter> INSERT INTO usuarios (nombre) VALUES ('A'); cqlsh:twitter> INSERT INTO usuarios (nombre) VALUES ('B'); cqlsh:twitter> INSERT INTO usuarios (nombre) VALUES ('C'); cqlsh:twitter> INSERT INTO usuarios (nombre) VALUES ('X'); cqlsh:twitter> INSERT INTO usuarios (nombre) VALUES ('Y');

 Usuario X sigue un nuevo usuario Y . Se ingresan a la lista de seguidores de uno cqlsh:twitter> UPDATE usuarios SET seguidores = seguidores+['X'] WHERE nombre = 'Y'; inmediatamente a la lista siguiendo del otro cqlsh:twitter> UPDATE usuarios SET siguiendo = siguiendo+['Y'] WHERE nombre = 'X';

cqlsh:twitter> UPDATE usuarios SET seguidores = seguidores+['A'] WHERE nombre = 'Y'; cqlsh:twitter> UPDATE usuarios SET siguiendo = siguiendo+['Y'] WHERE nombre = 'A';

NELSON OSPINA cqlsh:twitter> UPDATE usuarios SET seguidores = seguidores+['B’] WHERE nombre = 'Y'; cqlsh:twitter> UPDATE usuarios SET siguiendo = siguiendo+['Y'] WHERE nombre = 'B'; cqlsh:twitter> UPDATE usuarios SET seguidores = seguidores+['Y’] WHERE nombre = 'C'; cqlsh:twitter> UPDATE usuarios SET siguiendo = siguiendo+['C'] WHERE nombre = 'Y';



Usuario X deja de seguir a un usuario Y .

Debemos encontrar en que posición de la listas se encuentra la relación Según la documentación la búsqueda del índice dentro de la lista debe ser hecha en la aplicación del cliente por lo tanto para efecto de la tarea haremos una consulta simple

En la lista de Seguidores de Y, X ocupa la posición 0 la borraremos con

NELSON OSPINA

Hacemos el ejercicio también para borrar a Y en la lista de Siguiendo de X

Por lo tanto borramos la posición 0

La tabla queda así:

X no sigue a Y y Y no es seguido por X

Lecturas:  Listar usuarios que sigue el usuario X . Ya lo vimos antes solo con Select siguiendo from usuarios where nombre = X;  Determinar si un usuario X sigue al usuario Y . En este caso utilizaremos el filtro Contains.. si retorna un valor no nulo se considera que si existe, otra posibilidad es obtener la lista como el caso anterior y en sistema cliente verificar si lo contiene, para ello se debe tener indexado la columna:

arroja 0 rows por lo cual no lo sigue

NELSON OSPINA

Probamos con ver si B sigue a Y

Si es el caso ( recordemos que también existe otro seguidor de Y por lo cual este registro puede ser útil.

 Listar los usuarios que siguen al usuario X . Igual que en casos anteriores simplemente: Select seguidores from usuarios where nombre = X.