content/blog/mdad/cassandra-operaciones-basicas-y-arquitectura/post.md (view raw)
1```meta
2title: Cassandra: Operaciones Básicas y Arquitectura
3published: 2020-03-05T02:00:41+00:00
4updated: 2020-03-20T11:36:18+00:00
5```
6Este es el segundo post en la serie sobre Cassandra, con una breve descripción de las operaciones básicas (tales como inserción, recuperación e indexado), y ejecución por completo junto con el modelo de datos y arquitectura.
7
8Otros posts en esta serie:
9
10* [Cassandra: Introducción](/blog/mdad/cassandra-introduccion/)
11* [Cassandra: Operaciones Básicas y Arquitectura](/blog/mdad/cassandra-operaciones-basicas-y-arquitectura/) (este post)
12
13Este post está hecho en colaboración con un compañero.
14
15----------
16
17Antes de poder ejecutar ninguna consulta, debemos lanzar la base de datos en caso de que no se encuentre en ejecución aún. Para ello, en una terminal, lanzamos el binario de `cassandra`:
18
19```
20$ cassandra-3.11.6/bin/cassandra
21```
22
23Sin cerrar esta consola, abrimos otra en la que podamos usar la [CQL shell](https://cassandra.apache.org/doc/latest/tools/cqlsh.html):
24
25```
26$ cassandra-3.11.6/bin/cqlsh
27Connected to Test Cluster at 127.0.0.1:9042.
28[cqlsh 5.0.1 | Cassandra 3.11.6 | CQL spec 3.4.4 | Native protocol v4]
29Use HELP for help.
30cqlsh>
31```
32
33## Crear
34
35### Crear una base de datos
36
37Cassandra denomina a las «bases de datos» como «espacio de claves» (keyspace en inglés).
38
39```
40cqlsh> create keyspace helloworld with replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
41```
42
43Cuando creamos un nuevo _keyspace_, indicamos el nombre y la estrategia de replicación a usar. Nosotros usamos la estrategia simple con un factor 3 de replicación.
44
45### Crear una tabla
46
47Una vez estemos dentro de un _keyspace_, podemos crear tablas. Vamos a crear una tabla llamada «greetings» con identificador (número entero), mensaje (texto) y lenguaje (`varchar`).
48
49```
50cqlsh> use helloworld;
51cqlsh:helloworld> create table greetings(id int primary key, message text, lang varchar);
52```
53
54### Crear una fila
55
56Insertar nuevas filas es similar a otros sistemas gestores de datos, mediante la sentencia `INSERT`:
57
58```
59cqlsh:helloworld> insert into greetings(id, message, lang) values(1, '¡Bienvenido!', 'es');
60cqlsh:helloworld> insert into greetings(id, message, lang) values(2, 'Welcome!', 'es');
61```
62
63## Leer
64
65La lectura se lleva a cabo mediante la sentencia `SELECT`:
66
67```
68cqlsh:helloworld> select * from greetings;
69
70 id | lang | message
71----+------+--------------
72 1 | es | ¡Bienvenido!
73 2 | es | Welcome!
74
75(2 rows)
76```
77
78`cqlsh` colorea la salida, lo cuál resulta muy útil para identificar la clave primaria y distintos tipos de datos como texto, cadenas o números:
79
80![](image.png)
81
82## Actualizar
83
84La actualización se lleva a cabo con la sentencia `UPDATE`. Vamos a arreglar el fallo que hemos cometido al insertar «Welcome!» como español:
85
86```
87cqlsh:helloworld> update greetings set lang = 'en' where id = 2;
88```
89
90## Indexar
91
92```
93cqlsh:helloworld> create index langIndex on greetings(lang);
94```
95
96## Borrar
97
98Finalmente, el borrado se lleva a cabo con la sentencia `DELETE`. Es posible borrar solo campos individuales, lo cuál los pone a nulos:
99
100```
101cqlsh:helloworld> delete message from greetings where id = 1;
102```
103
104Para eliminar la fila entera, basta con no especificar la columna:
105
106```
107cqlsh:helloworld> delete from greetings where id = 1;
108```
109
110## Referencias
111
112* [tutorialspoint – Creating a Keyspace using Cqlsh](https://www.tutorialspoint.com/cassandra/cassandra_create_keyspace.htm)
113* [tutorialspoint – Cassandra – CQL Datatypes](https://www.tutorialspoint.com/cassandra/cassandra_cql_datatypes.htm)
114* [tutorialspoint – Cassandra – Create Table](https://www.tutorialspoint.com/cassandra/cassandra_create_table.htm)
115* [Data Flair – Cassandra Crud Operation – Create, Update, Read & Delete](https://data-flair.training/blogs/cassandra-crud-operation/)
116* [Cassandra Documentation – Secondary Indexes](https://cassandra.apache.org/doc/latest/cql/indexes.html)