SlideShare ist ein Scribd-Unternehmen logo
1 von 46
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

1 tutorial de mongo db
1 tutorial de mongo db1 tutorial de mongo db
1 tutorial de mongo db.. ..
 
Redis: servidor de estructuras de datos
Redis: servidor de estructuras de datosRedis: servidor de estructuras de datos
Redis: servidor de estructuras de datosAntonio Ognio
 
Introducción mongodb y desarrollo
Introducción mongodb y desarrolloIntroducción mongodb y desarrollo
Introducción mongodb y desarrolloJuan 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 MongoDBScalia
 
NOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDBNOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDBVictor 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-valorAlberto Gimeno
 
mongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y ComponentesmongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y Componentesomenar
 
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 WebinarMongoDB
 
Introduccion a Cassandra
Introduccion a CassandraIntroduccion a Cassandra
Introduccion a CassandraStratebi
 
Primeros pasos con neo4j
Primeros pasos con neo4jPrimeros pasos con neo4j
Primeros pasos con neo4jUbaldo Taladriz
 
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 NoSQLJavier 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 AndroidRicardo Monagas Medina
 

Was ist angesagt? (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
 

Andere mochten auch (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
 

Ähnlich wie Introducción al mundo NoSQL

Taller Redis
Taller RedisTaller Redis
Taller Redisbetabeers
 
Jorge lopez web_apps
Jorge lopez web_appsJorge lopez web_apps
Jorge lopez web_appseccutpl
 
Optimizando Sitios webs con Memcached
Optimizando Sitios webs con MemcachedOptimizando Sitios webs con Memcached
Optimizando Sitios webs con Memcachedrodasc
 
PHPAJAX
PHPAJAXPHPAJAX
PHPAJAXrodasc
 
Ruby On Rails Jun2009
Ruby On Rails Jun2009Ruby On Rails Jun2009
Ruby On Rails Jun2009Sergio 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 realtimeSocialmetrix
 
Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Antonio Ognio
 
Introducción a NoSQL con MongoDB
Introducción a NoSQL con MongoDBIntroducción a NoSQL con MongoDB
Introducción a NoSQL con MongoDBErick Camacho
 
Presentacion Demo Open Solaris
Presentacion Demo Open SolarisPresentacion Demo Open Solaris
Presentacion Demo Open Solarisguest926912
 
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 NOSQLRoanny Lamas
 
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 PersistenciaDavid J. Brenes
 
Introducción MongoDB con Java
Introducción MongoDB con JavaIntroducción MongoDB con Java
Introducción MongoDB con JavaCésar Hernández
 
Pablo Doval | Plain Concepts | Open Data
Pablo Doval | Plain Concepts | Open DataPablo Doval | Plain Concepts | Open Data
Pablo Doval | Plain Concepts | Open DataSmash Tech
 

Ähnlich wie 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
 

Kürzlich hochgeladen

Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramDIDIERFERNANDOGUERRE
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 

Kürzlich hochgeladen (20)

Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ram
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 

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