lunes, 12 de mayo de 2014

Curso Datastax - Cassandra: Práctica 3

Añadiendo funcionalidades a la aplicación web: Playlist

Se pretende añadir la capacidad de ordenar la búsqueda por artista, poder incluir las canciones favoritas seleccionando una estrella y limitar el número de filas que se muestran cuando se realiza una búsqueda por género.

Preparando la práctica

Se propone el uso de un script que borre el keyspace playlist, lo cree de nuevo con todas las tablas y las rellene, en definitiva, que nos permita resetear la base de datos. Se nos indica que añadamos otra nueva tabla track_by_id para poder realizar consultas de canciones por track_id.

Creamos archivo 'playlist.cql':
use system;
// Borramos el keyspace playlist anterior
drop keyspace playlist;

// Creando el keyspace
CREATE KEYSPACE playlist WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1 };
USE playlist;

// Creamos las tablas
create table track_by_id (track text, artist text, track_id UUID, track_length_in_seconds int, genre text,music_file text, primary key (track_id));
create table track_by_artist (track text, artist text, track_id UUID, track_length_in_seconds int, genre text,music_file text, primary key (artist, track, track_id));
create table track_by_genre (track text, artist text, track_id UUID, track_length_in_seconds int, genre text,music_file text, primary key (genre, artist, track, track_id));

create table artists_by_first_letter (first_letter text, artist text, primary key (first_letter, artist));

// Rellenamos las tablas
copy track_by_id (track_id, genre, artist, track, track_length_in_seconds, music_file) FROM '/home/astwin/Escritorio/Cassandra/Leccion 3/scripts/songs.csv' WITH DELIMITER = '|'  AND HEADER=true;
copy track_by_artist (track_id, genre, artist, track, track_length_in_seconds, music_file) FROM '/home/astwin/Escritorio/Cassandra/Leccion 3/scripts/songs.csv' WITH DELIMITER = '|'  AND HEADER=true;
copy track_by_genre (track_id, genre, artist, track, track_length_in_seconds, music_file) FROM '/home/astwin/Escritorio/Cassandra/Leccion 3/scripts/songs.csv' WITH DELIMITER = '|'  AND HEADER=true;

copy artists_by_first_letter (first_letter, artist) from '/home/astwin/Escritorio/Cassandra/Leccion 3/scripts/artists.csv' WITH DELIMITER = '|';
Para poder ejecutar un scrip desde el terminal cqlsh:
cqlsh:playlist> source '/home/astwin/Escritorio/Cassandra/Leccion 3/scripts/playlist.cql';

Ejercicio 1 - Añadiendo una clausula "ORDER BY" a un comando SELECT

Se ha añadido en la aplicación web en el apartado de artistas ordenado por letra, dos botones de flecha arriba y abajo para poder ordenar la consulta.  Cuando se pulsa uno de estos botones se pasa un parámetro booleano llamado 'desc' al método ArtistsDAO. listArtistByLetter. Si éste parámetro es true los resultados de deben presentar en orden alfabético descendente, y ascendente si es false. 
Modificamos la función añadiendo la clausula ORDER BY a la consulta:
Podemos comprobar como podemos ordenar el resultado de formas ascendente o descendente:



 




 

Ejercicio 2 - Eligiendo el número de resultados de la búsqueda

En la búsqueda por género existe una gran cantidad de canciones. Se pretende limitar el número de resultados de la consulta. Se debe modificar el método TracksDAO.listSongsBygenre():

Modificamos la función añadiendo una clausula LIMIT a la consulta:

Comprobamos que funciona en la aplicación web:


Ejercicio 3 - Canción 'Hot'

Se quiere añadir la funcionalidad de categorizar una canción como 'hot' en el playlist clickeando en la estrella que aparece en la aplicación web al lado de cada canción.
 
Añadir un campo boolean a las tablas que lo necesiten para indicar cuando una canción es 'hot' o no:
cqlsh:playlist> alter table track_by_artist add hot boolean ;
cqlsh:playlist> alter table track_by_genre add hot boolean ;
Modificar el constructor TracksDAO(Row row):

Debemos modificar el método star() para que cambie el estado del campo hot:

Comprobamos que todo funciona bien (la estrella se enciende y se actualiza en la base de datos el valor booleano):


 Ejercicio 4 -Limitar temporalmente que una canción sea 'hot'

  Añadir clausula TTL para que la categorización de hot sólo dure 30 segundos:

 

No hay comentarios:

Publicar un comentario