SlideShare una empresa de Scribd logo
Introducción al mundo NoSQL
            César D. Rodas
            crodas@php.net
          http://crodas.org/




        Free Software Asunción
          Asunción, Paraguay

                                 1
acerca de ...

         Desarrollador
         Estudiante
         Zelote de
              • Open Source
              • PHP
              • MongoDB

         PECL Developer
         ... y algunas cosas mas




@crodas - http://crodas.org/ - L EX
                               AT                     2
Agenda

         NoSQL
         Redis
         CouchDB
         MongoDB




@crodas - http://crodas.org/ - L EX
                               AT              3
NoSQL, ¾Qué es?



 NoSQL es un término usado en informática para agrupar una
     serie de almacenes de datos no relacionales que no
    proporcionan garantías ACID. Normalmente no tienen
        esquemas fijos de tablas ni sentencias join .
                                                        Wikipedia




@crodas - http://crodas.org/ - L EX
                               AT                               4
NoSQL, ¾Qué es?

         Como término nació a principios del 2009
         Como concepto, es algo viejo
         Conjunto de bases de datos que:
              • No provee SQL
              • Los datos no tienen relación
              • Generalmente escalan horizontalmente




@crodas - http://crodas.org/ - L EX
                               AT                       5
Problemas de las bases de datos
                           relacionales

         SQL
              • Lenguaje interpretado
              • Mucha funcionalidad

         ACID ofrece demasiado
         La manera más fácil de escalar es verticalmente




@crodas - http://crodas.org/ - L EX
                               AT                          6
CAP y BASE

         Teorema de CAP, puedes tener dos cosas:
              • Consistency
              • Availability
              • Partition tolerance

         BASE, el reemplazo de ACID
              • Basically Available
              • Soft state
              • Eventually consistent




@crodas - http://crodas.org/ - L EX
                               AT                  7
Algunas bases de datos NoSQL



@crodas - http://crodas.org/ - L EX
                               AT     8
REDIS



@crodas - http://crodas.org/ - L EX
                               AT             9
Redis
         In-memory Key-value store
         Muy rápido, en mi notebook:
              • 20K inserts en 0.6 segundos
              • 20K selects en 1 segundo

         Soporta operaciones con las claves
         Los valores pueden ser:
              • bytes
              • Sets
              • Tuplas

         Operaciones atómicas (Push, Pop, ranges, etc)
         Clientes para varios lenguajes
         Replicación a disco

@crodas - http://crodas.org/ - L EX
                               AT                        10
¾Documentos?



@crodas - http://crodas.org/ - L EX
                               AT                    11
http://www.flickr.com/photos/beglen/152027605/


@crodas - http://crodas.org/ - L EX
                               AT                                                 12
¾Documentos?

            Objetos sin funciones
         Arrays (en PHP)
         Tuples (en Python)
         Hashes (en Ruby y Perl)
         Sin esquema




@crodas - http://crodas.org/ - L EX
                               AT                    13
Documentos!
$collection[$id] = array(
   "title" => "PHP rules",
   "tags" => array("php", "web"),
   "body" => "... PHP rules ...",
   "comments" => array(
       array("author" => "crodas", "comment" => "Yes it does"),
   ),
   "visits" => array("200.10.228.34", "200.10.228.2"),
);




@crodas - http://crodas.org/ - L EX
                               AT                                 14
@crodas - http://crodas.org/ - L EX
                               AT     15
CouchDB
         Proyecto Apache
         JSON (no XML :-)
         Interfaz RESTful (+/-)
              • Estándar (++)
              • Http es lento (--)

         MVCC
         Safe IO (append only b-tree)
         Multi-master
         Excelente Interfaz de administración



@crodas - http://crodas.org/ - L EX
                               AT               16
CouchDB
         Javascript incrustado
         No soporta indexes (--)
         Map/Reduce para realizar queries (+/-)
         Soporta guardar archivos
         Fácil de escalar (con proxies convencionales)
         Distribuido y concurrente por naturaleza (Erlang)




@crodas - http://crodas.org/ - L EX
                               AT                            17
@crodas - http://crodas.org/ - L EX
                               AT     18
@crodas - http://crodas.org/ - L EX
                               AT     19
MongoDB
         <EN>Mongo</EN> != <ES>Mongo</ES>
         Orientada a documento
         Rápida, escalable, fácil de usar
         Soporta índices
              • Simples
              • Compuestos
              • Geo-spatial

         Auto-sharding
         Cliente PECL
         El MySQL del NoSQL


@crodas - http://crodas.org/ - L EX
                               AT               20
MongoDB
         Soporta sub-documentos
         Updates in-places
         Javascript incrustrado
         Map/Reduce para procesamiento off-line
         Todo es un documento




@crodas - http://crodas.org/ - L EX
                               AT                 21
http://bit.ly/mongodb-php



@crodas - http://crodas.org/ - L EX
                               AT     22
La diversión



@crodas - http://crodas.org/ - L EX
                               AT                    23
MongoDB - Operaciones
         Select
              • $gt, $lt, $gte, $lte, $eq, $neq: >, <, >=, <=, ==, !=
              • $in, $nin
              • $size, $exists
              • $where: Any javascript expression
              • group()
              • limit()
              • skip()

         Updates
              • $set
              • $unset
              • $push
              • $pull
              • $inc


@crodas - http://crodas.org/ - L EX
                               AT                                       24
pecl install mongo



@crodas - http://crodas.org/ - L EX
                               AT              25
MongoDB - Connección


/* connects to localhost:27017 */
$connection = new Mongo();

/* connect to a remote host (default port) */
$connection = new Mongo( "example.com" );

/* connect to a remote host at a given port */
$connection = new Mongo( "example.com:65432" );

/* select some DB (and create if it doesn't exits yet) */
$db = $connection->selectDB("db name");

/* select a "table" (collection) */
$table = $db->getCollection("table");


@crodas - http://crodas.org/ - L EX
                               AT                           26
FROM SQL to MongoDB




@crodas - http://crodas.org/ - L EX
                               AT      27
MongoDB - Count

/* SELECT count(*) FROM table */
$collection->count();

/* SELECT count(*) FROM table WHERE foo = 1 */
$collection->find(array("foo" => 1))->count();




@crodas - http://crodas.org/ - L EX
                               AT                       28
MongoDB - Consultas
/*
 * SELECT * FROM table WHERE field IN (5,6,7) and enable=1
 * and worth < 5
 * ORDER BY timestamp DESC
 */

$collection->ensureIndex(
   array('field'=>1, 'enable'=>1, 'worth'=>1, 'timestamp'=>-1)
);

$filter = array(
       'field' => array('$in' => array(5,6,7)),
       'enable' => 1,
       'worth' => array('$lt' => 5)
    );
$results = $collection->find($filter)->sort(array('timestamp' => -1));



@crodas - http://crodas.org/ - L EX
                               AT                                        29
MongoDB - Paginaciones
/*
 * SELECT * FROM table WHERE field IN (5,6,7) and enable=1
 * and worth < 5
 * ORDER BY timestamp DESC LIMIT $offset, 20
 */
$filter = array(
       'field' => array('$in' => array(5,6,7)),
       'enable' => 1,
       'worth' => array('$lt' => 5)
    );

$cursor = $collection->find($filter);
$cursor->sort(array('timestamp' => -1))->skip($offset)->limit(20);

foreach ($cursor as $result) {
   var dump($result);
}


@crodas - http://crodas.org/ - L EX
                               AT                                    30
Diseñando documentos
                     Simple multi-blog system




@crodas - http://crodas.org/ - L EX
                               AT               31
MongoDB - Collections
         Blog
         Post
         User
         Comment




@crodas - http://crodas.org/ - L EX
                               AT                         32
Documentos "blog"
$blog = array(
   "user" => <userref>,
   "title" => "Foo bar blog"
   "url" => array(
       "foobar.foobar.com",
       "anotherfoo.foobar.com",
   ),
   "permissions" => array(
       "edit" => array(<userref>, <userref>)
   );
   "post" => 1,
   ...
);




@crodas - http://crodas.org/ - L EX
                               AT                         33
Documentos "post"
$post = array(
   "blog" => <blogref>,
   "author" => <userref>,
   "uri" => "/another-post",
   "title" => "Another post",
   "excerpt" => "bla, bla, bla",
   "body" => "bar, foo bar, foo, bar",
   "tags" => array("list", "of tags"),
   "published" => true,
   "date" => <mongodate>,
);




@crodas - http://crodas.org/ - L EX
                               AT                         34
otros documentos
$comment = array(
   "post" => <postref>,
   "name" => "foobar",
   "email" => "foo@bar.com",
   "comment" => "Hello world",
   "date" => <mongodate>,
);

$user = array(
   "user" => "crodas",
   "email" => "crodas@php.net",
   "password" => "a1bad96dc68f891ca887d50eb3fb65ec82123d05",
   "name" => "Cesar Rodas",
);




@crodas - http://crodas.org/ - L EX
                               AT                              35
Índices

$blog col->ensureIndex(array("url" => 1));

$post col->ensureIndex(array("blog" => 1, "date" => -1));
$post col->ensureIndex(array("blog" => 1, "uri" => 1), array("unique" => 1));

$comment col->ensureIndex(array("post" => 1, "date" => -1));

$user col->ensureIndex(array("user" => 1), array("unique" => 1));
$user col->ensureIndex(array("email" => 1), array("unique" => 1));




@crodas - http://crodas.org/ - L EX
                               AT                                               36
Eso es todo :-)




@crodas - http://crodas.org/ - L EX
                               AT                   37
Agreguemos emociones :-)




@crodas - http://crodas.org/ - L EX
                               AT     38
Let's shard it!




@crodas - http://crodas.org/ - L EX
                               AT                       39
Estrategia
         Shard la coleción "blog"
         Shard la coleción "user"
         Las otras coleciones estan aisladas
              • Crear namespaces para post and comments (foo.post, foo.comments)
              • Modificar "blog" para agregar referencia hace el namespaces

         MongoDB hará el trabajo por nosotros




@crodas - http://crodas.org/ - L EX
                               AT                                                  40
Configurando MongoDB

/* Asumiendo que tienes MongoDB ejecutandose
 * en un entorno distribuido (sharded), esto
 * se hace una sola vez.
 *
 * $admin es una coneccion a la DB "admin"
 */
$admin->command(array(
    "shardcollection" => "blog",
    "key" => array("uri" => 1),
));

$admin->command(array(
    "shardcollection" => "user",
    "key" => array("user" => 1),
    "unique" => true,
));


@crodas - http://crodas.org/ - L EX
                               AT                      41
Nueva colección "blog"
$blog = array(
   "user" => <userref>,
   "title" => "Foo bar blog"
   "url" => array(
       "foobar.foobar.com",
       "anotherfoo.foobar.com",
   ),
   "permissions" => array(
       "edit" => array(<userref>, <userref>)
   );
   "post" => 1,
   "namespace" => "3h3g3k3",
   "database" => "34fs321",
);




@crodas - http://crodas.org/ - L EX
                               AT                         42
Selecionar el namespace
           correcto, y consultar :-)



@crodas - http://crodas.org/ - L EX
                               AT      43
Preguntas?




@crodas - http://crodas.org/ - L EX
                               AT                  44
Gracias hackers!




@crodas - http://crodas.org/ - L EX
                               AT                45
@crodas

                                      crodas.org



@crodas - http://crodas.org/ - L EX
                               AT                  46

Más contenido relacionado

La actualidad más candente

1 tutorial de mongo db
1 tutorial de mongo db1 tutorial de mongo db
1 tutorial de mongo db
.. ..
 
Que es MongoDB
Que es MongoDBQue es MongoDB
Que es MongoDB
Jessica Poma Espinal
 
MongoDB: la BBDD NoSQL más popular del mercado
MongoDB: la BBDD NoSQL más popular del mercadoMongoDB: la BBDD NoSQL más popular del mercado
MongoDB: la BBDD NoSQL más popular del mercado
Diego López-de-Ipiña González-de-Artaza
 
Redis: servidor de estructuras de datos
Redis: servidor de estructuras de datosRedis: servidor de estructuras de datos
Redis: servidor de estructuras de datos
Antonio Ognio
 
MongoDB
MongoDBMongoDB
Introducción mongodb y desarrollo
Introducción mongodb y desarrolloIntroducción mongodb y desarrollo
Introducción mongodb y desarrollo
Juan Ladetto
 
Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak
Andrei Amador
 
Introducción a NoSQL con MongoDB
Introducción a NoSQL con MongoDBIntroducción a NoSQL con MongoDB
Introducción a NoSQL con MongoDB
Scalia
 
NOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDBNOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDB
Victor Cuervo
 
Redis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valorRedis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valor
Alberto Gimeno
 
Mongodb
MongodbMongodb
Mongodb
Jn F. Mendoza
 
mongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y ComponentesmongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y Componentes
omenar
 
Introducción a NoSQL y MongoDB Webinar
Introducción a NoSQL y MongoDB WebinarIntroducción a NoSQL y MongoDB Webinar
Introducción a NoSQL y MongoDB Webinar
MongoDB
 
Introduccion a Cassandra
Introduccion a CassandraIntroduccion a Cassandra
Introduccion a Cassandra
Stratebi
 
MongoDB
MongoDBMongoDB
MongoDB
camposer
 
Primeros pasos con neo4j
Primeros pasos con neo4jPrimeros pasos con neo4j
Primeros pasos con neo4j
Ubaldo Taladriz
 
MongoDB Avanzado
MongoDB AvanzadoMongoDB Avanzado
MongoDB Avanzado
Victor Cuervo
 
MONGODB - NOSQL
MONGODB - NOSQLMONGODB - NOSQL
Un acercamiento a las bases de datos NoSQL
Un acercamiento a las bases de datos NoSQLUn acercamiento a las bases de datos NoSQL
Un acercamiento a las bases de datos NoSQL
Javier Guillot Jiménez
 
CouchDB y el desarrollo de aplicaciones Android
CouchDB y el desarrollo de aplicaciones AndroidCouchDB y el desarrollo de aplicaciones Android
CouchDB y el desarrollo de aplicaciones Android
Ricardo Monagas Medina
 

La actualidad más candente (20)

1 tutorial de mongo db
1 tutorial de mongo db1 tutorial de mongo db
1 tutorial de mongo db
 
Que es MongoDB
Que es MongoDBQue es MongoDB
Que es MongoDB
 
MongoDB: la BBDD NoSQL más popular del mercado
MongoDB: la BBDD NoSQL más popular del mercadoMongoDB: la BBDD NoSQL más popular del mercado
MongoDB: la BBDD NoSQL más popular del mercado
 
Redis: servidor de estructuras de datos
Redis: servidor de estructuras de datosRedis: servidor de estructuras de datos
Redis: servidor de estructuras de datos
 
MongoDB
MongoDBMongoDB
MongoDB
 
Introducción mongodb y desarrollo
Introducción mongodb y desarrolloIntroducción mongodb y desarrollo
Introducción mongodb y desarrollo
 
Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak
 
Introducción a NoSQL con MongoDB
Introducción a NoSQL con MongoDBIntroducción a NoSQL con MongoDB
Introducción a NoSQL con MongoDB
 
NOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDBNOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDB
 
Redis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valorRedis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valor
 
Mongodb
MongodbMongodb
Mongodb
 
mongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y ComponentesmongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y Componentes
 
Introducción a NoSQL y MongoDB Webinar
Introducción a NoSQL y MongoDB WebinarIntroducción a NoSQL y MongoDB Webinar
Introducción a NoSQL y MongoDB Webinar
 
Introduccion a Cassandra
Introduccion a CassandraIntroduccion a Cassandra
Introduccion a Cassandra
 
MongoDB
MongoDBMongoDB
MongoDB
 
Primeros pasos con neo4j
Primeros pasos con neo4jPrimeros pasos con neo4j
Primeros pasos con neo4j
 
MongoDB Avanzado
MongoDB AvanzadoMongoDB Avanzado
MongoDB Avanzado
 
MONGODB - NOSQL
MONGODB - NOSQLMONGODB - NOSQL
MONGODB - NOSQL
 
Un acercamiento a las bases de datos NoSQL
Un acercamiento a las bases de datos NoSQLUn acercamiento a las bases de datos NoSQL
Un acercamiento a las bases de datos NoSQL
 
CouchDB y el desarrollo de aplicaciones Android
CouchDB y el desarrollo de aplicaciones AndroidCouchDB y el desarrollo de aplicaciones Android
CouchDB y el desarrollo de aplicaciones Android
 

Destacado

Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4jBases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Diego López-de-Ipiña González-de-Artaza
 
Bd no sql conceptos basicos
Bd no sql conceptos basicosBd no sql conceptos basicos
Bd no sql conceptos basicos
Escuela de Computación UCV
 
How to Speed up your Database
How to Speed up your DatabaseHow to Speed up your Database
How to Speed up your Database
Hazelcast
 
Sql vs nosql
Sql vs nosqlSql vs nosql
Sql vs nosql
Nick Verschueren
 
Bd no sqlcb2
Bd no sqlcb2Bd no sqlcb2
Oopphp5
Oopphp5Oopphp5
Oopphp5
Lalo Pérez
 
Bd nosql tecnicas III
Bd nosql tecnicas IIIBd nosql tecnicas III
Bd nosql tecnicas III
Escuela de Computación UCV
 
Fire Bird
Fire BirdFire Bird
Fire Bird
lejogu
 
NoSql y MongoDB
NoSql y MongoDBNoSql y MongoDB
NoSql y MongoDB
David Gómez García
 
SQLite
SQLiteSQLite
SQLite
maymania
 
Distributed applications using Hazelcast
Distributed applications using HazelcastDistributed applications using Hazelcast
Distributed applications using Hazelcast
Taras Matyashovsky
 
Sql vs NoSQL
Sql vs NoSQLSql vs NoSQL
Sql vs NoSQL
RTigger
 
NoSQL Databases: Why, what and when
NoSQL Databases: Why, what and whenNoSQL Databases: Why, what and when
NoSQL Databases: Why, what and when
Lorenzo Alberton
 
Introduction to NoSQL Databases
Introduction to NoSQL DatabasesIntroduction to NoSQL Databases
Introduction to NoSQL Databases
Derek Stainer
 
Bd no sql tecnicas2
Bd no sql tecnicas2Bd no sql tecnicas2
Bd no sql tecnicas2
Escuela de Computación UCV
 
Bd nosql clave valor
Bd nosql clave valorBd nosql clave valor
Bd nosql clave valor
Escuela de Computación UCV
 
Bd no sq ldocumento
Bd no sq ldocumentoBd no sq ldocumento
Bd no sq ldocumento
Escuela de Computación UCV
 

Destacado (17)

Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4jBases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
 
Bd no sql conceptos basicos
Bd no sql conceptos basicosBd no sql conceptos basicos
Bd no sql conceptos basicos
 
How to Speed up your Database
How to Speed up your DatabaseHow to Speed up your Database
How to Speed up your Database
 
Sql vs nosql
Sql vs nosqlSql vs nosql
Sql vs nosql
 
Bd no sqlcb2
Bd no sqlcb2Bd no sqlcb2
Bd no sqlcb2
 
Oopphp5
Oopphp5Oopphp5
Oopphp5
 
Bd nosql tecnicas III
Bd nosql tecnicas IIIBd nosql tecnicas III
Bd nosql tecnicas III
 
Fire Bird
Fire BirdFire Bird
Fire Bird
 
NoSql y MongoDB
NoSql y MongoDBNoSql y MongoDB
NoSql y MongoDB
 
SQLite
SQLiteSQLite
SQLite
 
Distributed applications using Hazelcast
Distributed applications using HazelcastDistributed applications using Hazelcast
Distributed applications using Hazelcast
 
Sql vs NoSQL
Sql vs NoSQLSql vs NoSQL
Sql vs NoSQL
 
NoSQL Databases: Why, what and when
NoSQL Databases: Why, what and whenNoSQL Databases: Why, what and when
NoSQL Databases: Why, what and when
 
Introduction to NoSQL Databases
Introduction to NoSQL DatabasesIntroduction to NoSQL Databases
Introduction to NoSQL Databases
 
Bd no sql tecnicas2
Bd no sql tecnicas2Bd no sql tecnicas2
Bd no sql tecnicas2
 
Bd nosql clave valor
Bd nosql clave valorBd nosql clave valor
Bd nosql clave valor
 
Bd no sq ldocumento
Bd no sq ldocumentoBd no sq ldocumento
Bd no sq ldocumento
 

Similar a Introducción al mundo NoSQL

Mongo Mapper
Mongo MapperMongo Mapper
Mongo Mapper
Francisco Viramontes
 
Taller Redis
Taller RedisTaller Redis
Taller Redis
betabeers
 
Jorge lopez web_apps
Jorge lopez web_appsJorge lopez web_apps
Jorge lopez web_apps
eccutpl
 
Optimizando Sitios webs con Memcached
Optimizando Sitios webs con MemcachedOptimizando Sitios webs con Memcached
Optimizando Sitios webs con Memcached
rodasc
 
PHPAJAX
PHPAJAXPHPAJAX
PHPAJAX
rodasc
 
Ruby On Rails Jun2009
Ruby On Rails Jun2009Ruby On Rails Jun2009
Ruby On Rails Jun2009
Sergio Alonso
 
Tutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtimeTutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtime
Socialmetrix
 
Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010
Antonio Ognio
 
Semana 3 Mongodb
Semana 3   MongodbSemana 3   Mongodb
Introducción a NoSQL con MongoDB
Introducción a NoSQL con MongoDBIntroducción a NoSQL con MongoDB
Introducción a NoSQL con MongoDB
Erick Camacho
 
Presentacion Demo Open Solaris
Presentacion Demo Open SolarisPresentacion Demo Open Solaris
Presentacion Demo Open Solaris
guest926912
 
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQLDesarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Roanny Lamas
 
NoSQL: la siguiente generación de Base de Datos
NoSQL: la siguiente generación de Base de DatosNoSQL: la siguiente generación de Base de Datos
NoSQL: la siguiente generación de Base de Datos
Diego López-de-Ipiña González-de-Artaza
 
Cloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de PersistenciaCloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de Persistencia
David J. Brenes
 
Introducción MongoDB con Java
Introducción MongoDB con JavaIntroducción MongoDB con Java
Introducción MongoDB con Java
César Hernández
 
MEAN ¿otro buzzword?
MEAN ¿otro buzzword?MEAN ¿otro buzzword?
MEAN ¿otro buzzword?
Jorge Jiménez
 
Nosqlcp
NosqlcpNosqlcp
Nosqlcp
campus party
 
Nosqlcp
NosqlcpNosqlcp
Nosqlcp
campus party
 
JRuby al Rescate de J2EE
JRuby al Rescate de J2EEJRuby al Rescate de J2EE
JRuby al Rescate de J2EE
Jorge Alberto Rodríguez Suárez
 
Pablo Doval | Plain Concepts | Open Data
Pablo Doval | Plain Concepts | Open DataPablo Doval | Plain Concepts | Open Data
Pablo Doval | Plain Concepts | Open Data
Smash Tech
 

Similar a Introducción al mundo NoSQL (20)

Mongo Mapper
Mongo MapperMongo Mapper
Mongo Mapper
 
Taller Redis
Taller RedisTaller Redis
Taller Redis
 
Jorge lopez web_apps
Jorge lopez web_appsJorge lopez web_apps
Jorge lopez web_apps
 
Optimizando Sitios webs con Memcached
Optimizando Sitios webs con MemcachedOptimizando Sitios webs con Memcached
Optimizando Sitios webs con Memcached
 
PHPAJAX
PHPAJAXPHPAJAX
PHPAJAX
 
Ruby On Rails Jun2009
Ruby On Rails Jun2009Ruby On Rails Jun2009
Ruby On Rails Jun2009
 
Tutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtimeTutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtime
 
Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010
 
Semana 3 Mongodb
Semana 3   MongodbSemana 3   Mongodb
Semana 3 Mongodb
 
Introducción a NoSQL con MongoDB
Introducción a NoSQL con MongoDBIntroducción a NoSQL con MongoDB
Introducción a NoSQL con MongoDB
 
Presentacion Demo Open Solaris
Presentacion Demo Open SolarisPresentacion Demo Open Solaris
Presentacion Demo Open Solaris
 
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQLDesarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
 
NoSQL: la siguiente generación de Base de Datos
NoSQL: la siguiente generación de Base de DatosNoSQL: la siguiente generación de Base de Datos
NoSQL: la siguiente generación de Base de Datos
 
Cloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de PersistenciaCloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de Persistencia
 
Introducción MongoDB con Java
Introducción MongoDB con JavaIntroducción MongoDB con Java
Introducción MongoDB con Java
 
MEAN ¿otro buzzword?
MEAN ¿otro buzzword?MEAN ¿otro buzzword?
MEAN ¿otro buzzword?
 
Nosqlcp
NosqlcpNosqlcp
Nosqlcp
 
Nosqlcp
NosqlcpNosqlcp
Nosqlcp
 
JRuby al Rescate de J2EE
JRuby al Rescate de J2EEJRuby al Rescate de J2EE
JRuby al Rescate de J2EE
 
Pablo Doval | Plain Concepts | Open Data
Pablo Doval | Plain Concepts | Open DataPablo Doval | Plain Concepts | Open Data
Pablo Doval | Plain Concepts | Open Data
 

Último

Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
ValeriaAyala48
 
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
bendezuperezjimena
 
Manual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computoManual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computo
mantenimientocarbra6
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
cbtechchihuahua
 
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdfProjecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Festibity
 
modelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptxmodelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptx
evelinglilibethpeafi
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
larapalaciosmonzon28
 
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
IsabelQuintero36
 
HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
maralache30
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
paulroyal74
 
Informe DATA & IA 2024 Primera encuesta sobre el uso de IA en las empresas pe...
Informe DATA & IA 2024 Primera encuesta sobre el uso de IA en las empresas pe...Informe DATA & IA 2024 Primera encuesta sobre el uso de IA en las empresas pe...
Informe DATA & IA 2024 Primera encuesta sobre el uso de IA en las empresas pe...
alejandromanuelve
 
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial ValenciaCatalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
AMADO SALVADOR
 
Refrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y ForzadoRefrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y Forzado
NicandroMartinez2
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
larapalaciosmonzon28
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Festibity
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
AMADO SALVADOR
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVATECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
LilibethEstupian
 
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
AMADO SALVADOR
 
computacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADOcomputacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADO
YaniEscobar2
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
CesarPazosQuispe
 

Último (20)

Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
 
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
 
Manual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computoManual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computo
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
 
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdfProjecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
 
modelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptxmodelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptx
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
 
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
 
HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
 
Informe DATA & IA 2024 Primera encuesta sobre el uso de IA en las empresas pe...
Informe DATA & IA 2024 Primera encuesta sobre el uso de IA en las empresas pe...Informe DATA & IA 2024 Primera encuesta sobre el uso de IA en las empresas pe...
Informe DATA & IA 2024 Primera encuesta sobre el uso de IA en las empresas pe...
 
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial ValenciaCatalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
 
Refrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y ForzadoRefrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y Forzado
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVATECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
 
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
 
computacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADOcomputacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADO
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
 

Introducción al mundo NoSQL

  • 1. Introducción al mundo NoSQL César D. Rodas crodas@php.net http://crodas.org/ Free Software Asunción Asunción, Paraguay 1
  • 2. acerca de ... Desarrollador Estudiante Zelote de • Open Source • PHP • MongoDB PECL Developer ... y algunas cosas mas @crodas - http://crodas.org/ - L EX AT 2
  • 3. Agenda NoSQL Redis CouchDB MongoDB @crodas - http://crodas.org/ - L EX AT 3
  • 4. NoSQL, ¾Qué es? NoSQL es un término usado en informática para agrupar una serie de almacenes de datos no relacionales que no proporcionan garantías ACID. Normalmente no tienen esquemas fijos de tablas ni sentencias join . Wikipedia @crodas - http://crodas.org/ - L EX AT 4
  • 5. NoSQL, ¾Qué es? Como término nació a principios del 2009 Como concepto, es algo viejo Conjunto de bases de datos que: • No provee SQL • Los datos no tienen relación • Generalmente escalan horizontalmente @crodas - http://crodas.org/ - L EX AT 5
  • 6. Problemas de las bases de datos relacionales SQL • Lenguaje interpretado • Mucha funcionalidad ACID ofrece demasiado La manera más fácil de escalar es verticalmente @crodas - http://crodas.org/ - L EX AT 6
  • 7. CAP y BASE Teorema de CAP, puedes tener dos cosas: • Consistency • Availability • Partition tolerance BASE, el reemplazo de ACID • Basically Available • Soft state • Eventually consistent @crodas - http://crodas.org/ - L EX AT 7
  • 8. Algunas bases de datos NoSQL @crodas - http://crodas.org/ - L EX AT 8
  • 10. Redis In-memory Key-value store Muy rápido, en mi notebook: • 20K inserts en 0.6 segundos • 20K selects en 1 segundo Soporta operaciones con las claves Los valores pueden ser: • bytes • Sets • Tuplas Operaciones atómicas (Push, Pop, ranges, etc) Clientes para varios lenguajes Replicación a disco @crodas - http://crodas.org/ - L EX AT 10
  • 13. ¾Documentos? Objetos sin funciones Arrays (en PHP) Tuples (en Python) Hashes (en Ruby y Perl) Sin esquema @crodas - http://crodas.org/ - L EX AT 13
  • 14. Documentos! $collection[$id] = array( "title" => "PHP rules", "tags" => array("php", "web"), "body" => "... PHP rules ...", "comments" => array( array("author" => "crodas", "comment" => "Yes it does"), ), "visits" => array("200.10.228.34", "200.10.228.2"), ); @crodas - http://crodas.org/ - L EX AT 14
  • 16. CouchDB Proyecto Apache JSON (no XML :-) Interfaz RESTful (+/-) • Estándar (++) • Http es lento (--) MVCC Safe IO (append only b-tree) Multi-master Excelente Interfaz de administración @crodas - http://crodas.org/ - L EX AT 16
  • 17. CouchDB Javascript incrustado No soporta indexes (--) Map/Reduce para realizar queries (+/-) Soporta guardar archivos Fácil de escalar (con proxies convencionales) Distribuido y concurrente por naturaleza (Erlang) @crodas - http://crodas.org/ - L EX AT 17
  • 20. MongoDB <EN>Mongo</EN> != <ES>Mongo</ES> Orientada a documento Rápida, escalable, fácil de usar Soporta índices • Simples • Compuestos • Geo-spatial Auto-sharding Cliente PECL El MySQL del NoSQL @crodas - http://crodas.org/ - L EX AT 20
  • 21. MongoDB Soporta sub-documentos Updates in-places Javascript incrustrado Map/Reduce para procesamiento off-line Todo es un documento @crodas - http://crodas.org/ - L EX AT 21
  • 23. La diversión @crodas - http://crodas.org/ - L EX AT 23
  • 24. MongoDB - Operaciones Select • $gt, $lt, $gte, $lte, $eq, $neq: >, <, >=, <=, ==, != • $in, $nin • $size, $exists • $where: Any javascript expression • group() • limit() • skip() Updates • $set • $unset • $push • $pull • $inc @crodas - http://crodas.org/ - L EX AT 24
  • 25. pecl install mongo @crodas - http://crodas.org/ - L EX AT 25
  • 26. MongoDB - Connección /* connects to localhost:27017 */ $connection = new Mongo(); /* connect to a remote host (default port) */ $connection = new Mongo( "example.com" ); /* connect to a remote host at a given port */ $connection = new Mongo( "example.com:65432" ); /* select some DB (and create if it doesn't exits yet) */ $db = $connection->selectDB("db name"); /* select a "table" (collection) */ $table = $db->getCollection("table"); @crodas - http://crodas.org/ - L EX AT 26
  • 27. FROM SQL to MongoDB @crodas - http://crodas.org/ - L EX AT 27
  • 28. MongoDB - Count /* SELECT count(*) FROM table */ $collection->count(); /* SELECT count(*) FROM table WHERE foo = 1 */ $collection->find(array("foo" => 1))->count(); @crodas - http://crodas.org/ - L EX AT 28
  • 29. MongoDB - Consultas /* * SELECT * FROM table WHERE field IN (5,6,7) and enable=1 * and worth < 5 * ORDER BY timestamp DESC */ $collection->ensureIndex( array('field'=>1, 'enable'=>1, 'worth'=>1, 'timestamp'=>-1) ); $filter = array( 'field' => array('$in' => array(5,6,7)), 'enable' => 1, 'worth' => array('$lt' => 5) ); $results = $collection->find($filter)->sort(array('timestamp' => -1)); @crodas - http://crodas.org/ - L EX AT 29
  • 30. MongoDB - Paginaciones /* * SELECT * FROM table WHERE field IN (5,6,7) and enable=1 * and worth < 5 * ORDER BY timestamp DESC LIMIT $offset, 20 */ $filter = array( 'field' => array('$in' => array(5,6,7)), 'enable' => 1, 'worth' => array('$lt' => 5) ); $cursor = $collection->find($filter); $cursor->sort(array('timestamp' => -1))->skip($offset)->limit(20); foreach ($cursor as $result) { var dump($result); } @crodas - http://crodas.org/ - L EX AT 30
  • 31. Diseñando documentos Simple multi-blog system @crodas - http://crodas.org/ - L EX AT 31
  • 32. MongoDB - Collections Blog Post User Comment @crodas - http://crodas.org/ - L EX AT 32
  • 33. Documentos "blog" $blog = array( "user" => <userref>, "title" => "Foo bar blog" "url" => array( "foobar.foobar.com", "anotherfoo.foobar.com", ), "permissions" => array( "edit" => array(<userref>, <userref>) ); "post" => 1, ... ); @crodas - http://crodas.org/ - L EX AT 33
  • 34. Documentos "post" $post = array( "blog" => <blogref>, "author" => <userref>, "uri" => "/another-post", "title" => "Another post", "excerpt" => "bla, bla, bla", "body" => "bar, foo bar, foo, bar", "tags" => array("list", "of tags"), "published" => true, "date" => <mongodate>, ); @crodas - http://crodas.org/ - L EX AT 34
  • 35. otros documentos $comment = array( "post" => <postref>, "name" => "foobar", "email" => "foo@bar.com", "comment" => "Hello world", "date" => <mongodate>, ); $user = array( "user" => "crodas", "email" => "crodas@php.net", "password" => "a1bad96dc68f891ca887d50eb3fb65ec82123d05", "name" => "Cesar Rodas", ); @crodas - http://crodas.org/ - L EX AT 35
  • 36. Índices $blog col->ensureIndex(array("url" => 1)); $post col->ensureIndex(array("blog" => 1, "date" => -1)); $post col->ensureIndex(array("blog" => 1, "uri" => 1), array("unique" => 1)); $comment col->ensureIndex(array("post" => 1, "date" => -1)); $user col->ensureIndex(array("user" => 1), array("unique" => 1)); $user col->ensureIndex(array("email" => 1), array("unique" => 1)); @crodas - http://crodas.org/ - L EX AT 36
  • 37. Eso es todo :-) @crodas - http://crodas.org/ - L EX AT 37
  • 38. Agreguemos emociones :-) @crodas - http://crodas.org/ - L EX AT 38
  • 39. Let's shard it! @crodas - http://crodas.org/ - L EX AT 39
  • 40. Estrategia Shard la coleción "blog" Shard la coleción "user" Las otras coleciones estan aisladas • Crear namespaces para post and comments (foo.post, foo.comments) • Modificar "blog" para agregar referencia hace el namespaces MongoDB hará el trabajo por nosotros @crodas - http://crodas.org/ - L EX AT 40
  • 41. Configurando MongoDB /* Asumiendo que tienes MongoDB ejecutandose * en un entorno distribuido (sharded), esto * se hace una sola vez. * * $admin es una coneccion a la DB "admin" */ $admin->command(array( "shardcollection" => "blog", "key" => array("uri" => 1), )); $admin->command(array( "shardcollection" => "user", "key" => array("user" => 1), "unique" => true, )); @crodas - http://crodas.org/ - L EX AT 41
  • 42. Nueva colección "blog" $blog = array( "user" => <userref>, "title" => "Foo bar blog" "url" => array( "foobar.foobar.com", "anotherfoo.foobar.com", ), "permissions" => array( "edit" => array(<userref>, <userref>) ); "post" => 1, "namespace" => "3h3g3k3", "database" => "34fs321", ); @crodas - http://crodas.org/ - L EX AT 42
  • 43. Selecionar el namespace correcto, y consultar :-) @crodas - http://crodas.org/ - L EX AT 43
  • 45. Gracias hackers! @crodas - http://crodas.org/ - L EX AT 45
  • 46. @crodas crodas.org @crodas - http://crodas.org/ - L EX AT 46