6. •Key – Value
•Column Family
•Document Oriented
•Graph
•Others
“
2 Tipos de bases de datos
7. 2 Key – Value DataBases
Store en formato clave – valor
{ clave1 : valor1, clave2 : valor2 …}
Algunas permiten guardar
Listas como Redis y otras
no son consistentes como
Memcached
8. 2 Column Family DataBases
Store en formato columnar
ColumnFamily Recibo
Key : 39354999F
Store : { version_1 : { key : value, key2:
value2 } }
Se basan en tener
columnas de datos, Limite
en las Column Families de
3 a 100, más de 1B de
columnas internas.
9. 2 Document Oriented Databases
Store en Documento : Colection User
{
FirstName: "Jonathan",
Address: "15 Wanamassa Point Road",
Children: [
{Name: "Michael", Age: 10},
{Name: "Jennifer", Age: 8},
{Name: "Samantha", Age: 5},
{Name: "Elena", Age: 2}
]
}
Capacidad de insertar
directamente desde REST
API’s, JSON > DB.
Lecturas muy rápidas, no
schemas.
15. 3.2 Starting Query
1 – Connect to DataBase
Mongo
2 – Show current databases
Dbs
3 - Show Current DB
Db
4 – Select DB
Use DB_NAME
Creating Documents:
doc1 = { name : “Cristian” , age :
“25” }
doc2 = { x : 3 }
db.people.insert(doc1)
db.numbers.insert(doc2)
1 – Mostrar las colecciones de la DB
show collections
2 – Look for register in DB
db.people.find().pretty()
db.numbers.find()
Insertando varios documentos con un for
i = 0
for (i ; i < 10 ; i++) { db.numbers.insert({ x : i }) }
db.numbers.findOne( { x : 1 } )
Recorriendo con un cursor
var cursor = db.numbers.find()
while( cursor.hasNext() ) printjson ( cursor.next() )
Acceso como un array : > printjson ( cursor [ 4 ] )
16. 3.3 Complex Operations
1 – Query with Limit
db.numbers.find().limit(4)
2 – Query by criteria
db.people.find( { age : { $gt : 25 } } )
3 – Sorting Results
db.people.find( { age : { $gt : 25 } } ).
sort( { age : 1 } )
Creating more Documents:
doc2 = { name : “Juan” , age : 19 }
doc3 = { name : “Sonia” , age : 24}
doc4 = { name : “Carla” , age : 30 }
db.people.remove( { name :
“Cristian” })
db.people.insert({“name” :
“Cristian” , age : 25})
db.people.insert(doc1 to doc5)
Updating Operation
db.people.update( { name : “Cristian” } , { $set : { age
: 30 } } )
db.people.findOne( { name : “Cristian” } )
Remove Operations
db.people.remove( { name : “Carla” } )
db.people.remove( { age : { $gt : 25 } } )
db.people.find().pretty()
17. 3.4 Is your TURN!
Creación de una base de datos para un blog
Colecciones:
Users : id_user, name, age, posts => array de posts que tiene el usuario
Posts : id_post , post
Crear 3 usuarios
Crear 6 posts
Asignar 2 posts a cada Usuario
Listar los usuarios
Listar los posts de un usuario
Pistas!
Posts es un array! ( posts : [] )
Para añadir un post al usuario teneis que utilizar o el $set modificando el
array o un $push con un $each
db.collection.update( { QUERY } , { $push : { posts { $each : [ num1 ,
num2..] } } } )
Para listar los posts de un usuario se pueden/deben usar 2 query.
21. 1 – Base de datos Columnal
2 – Sistema basado en Nodos
3 – Dos sistemas de Query : CLI / CQL
4 – Diferentes Tipos de Column Family
“
4.2 Primeros Conceptos
22. 1 – Column Family
2- Super Column Family
“
4.2 Primeros Conceptos – CF’s
25. 4.3 Starting Query – Cassandra-cli
1. Starting the cli
cd cassandra/bin
./cassandra-cli
2. Creating a keyspace
Create keyspace test;
3. Select the keyspace
Use test;
4. Creating a CF
Create column family User with comparator = UTF8Type;
5. Updating Column Family Schema
Update column family User with column_metadata = [
{column_name : first , validation_class : UTF8Type},
{column_name : last , validation_class : UTF8Type},
{column_name : age , validation_class : UTF8Type, index_type : KEYS},
]
6.Vamos a insertar un registro en la Column Family
assume User keys as utf8;
set User['cristian']['first'] = ‘Cristian’;
set User['cristian']['last'] = ‘Vitales’;
set User['cristian']['age'] = '38';
26. 4.3 Starting Query – Cassandra-cli
1. Update the register
SET User[‘cristian’][‘first’] = ‘Juan’;
2. Get Data
GET User[‘cristian’];
GET User where age = ‘38’;
3.Create SuperColumn Family
create column family Super with column_type = 'Super' and comparator = ‘UTF8Type’;
Make assumptions for CF Super in ( KEYS / Comparator / Sub_Comparator / Validator )
Set Super[‘Limpieza’][‘version_1’][‘nombre’] = ‘KH7’;
Get Super[‘Limpieza’];
27. 4.3 Starting Query – CQL
1. Mostrar los keyspace -> describe keyspaces;
2. Usar un keyspace -> use [Keyspace] -> use test;
3. Crear una Columna/Table:
Create Table usuarios ( user_id int primary key , fname text , lname text);
Describe tables;
INSERT INTO usuarios (user_id, fname, lname) VALUES (1745, 'john', 'smith');
INSERT INTO usuarios (user_id, fname, lname) VALUES (1744, 'john', 'doe');
INSERT INTO usuarios (user_id, fname, lname) VALUES (1746, 'john', 'smith');
Select * from usuarios
Create index on usuarios (lname);
Select * from usuarios where lname = ‘doe’;
DROP table usuarios;
28. 4.3 Is your Turn!
1. Crear un Keyspace llamado “Twitter”
2. Crear una Column Family llamada Tweets (id, tweet, fecha)
3. Crear una Column Family llamada Usuarios(id, nombre,apellido, edad)
4. Insertar Varios Tweets y Varios Usuarios
5. Listar los Usuarios cuya edad sea > 30
6. Listar los tweets cuya fecha sea igual a la de hoy en formato (Y/M/d)
7. Crear un indice sobre el nombre del usuario
8. Crear un indice sobre el tweet
9. Borrar la tabla usuarios.