Por: Daniel Salas Denegri
CoFundador & CTO en KunanTI
GDG Arequipa
@danielsd10 gplus.to/danielsd10
Bases de Datos NoSQL
¿Qué es NoSQL?
Tipos de Bases de Datos NoSQL
MongoDB
Acerca de MongoDB
Arquitectura
Instalación
Drivers para Lenguajes de Programación
Aplicación de Demostración: PHP
Google Maps API
Librerías
Conexión a Base de Datos
Colecciones
Consulta de Datos
Edición de Datos
Otras Funcionalidades y Recursos
Funcionalidades de MongoDB
Herramientas y Recursos
• Not Only SQL
• Engloba un conjunto de Bases de Datos distintas de las
bases de datos relacionales (RDBMS).
• Las aplicaciones actuales deben responder a nuevas
exigencias:
• Grandes cantidades de información
• Mayor concurrencia
• Flexibilidad de los datos
• Arquitecturas en la Nube
• Para ciertos problemas de almacenamiento, otras
tecnologías se aplican mejor.
¿Qué es NoSQL?
Tipos de Bases de Datos NoSQL
Key /Value Column
Document Graph
• "humongous"
• Creada en 2009 por 10gen
• Características resaltantes
• Basada en Documentos JSON (BSON)
• Multiplataforma
• Velocidad
• Escalabilidad
• Open Source
• Soportada por muchos lenguajes
• Utilizada por
• Foursquare (Red Social)
• Craiglist (Archivo de anuncios)
• Intuit (Análisis en tiempo real)
• MTV (CMS)
www.mongodb.org www.10gen.com
• Jerarquía
• Base de Datos
• Colecciones
• Documentos
• Notación JSON / BSON
• Tipos soportados: String, Double,
Object, Date, Null,Array, Document,
ObjectID, Regex, Null.
• Datos Binarios (GridFS)
• Lenguaje de consultas: Javascript
• Esquema
• Conjunto de claves / valor
• Colecciones no tienen estructura
Arquitectura
www.mongodb.org bsonspec.org
webDB
blogs users
{
_id: ObjectID(«12ba1154cd19»),
title: «GDG Arequipa»,
regdate: new Date(),
tags: [«db», «php»],
location: {«lat»: -70, «lng»: 80}
}
• Última versión: 2.4.3 (Abril 2013)
• Versiones de 32 y 64 bits
• Windows
• Descargar y desempaquetar ZIP y ejecutar mongod.exe
• Se puede configurar como Servicio
• Intérprete de comandos: mongo.exe
• Linux
• Código fuente (tgz)
• Instalación rápida: apt-get (deb), yum (rpm)
• Intérprete de comandos: mongo
• MacOS / Solaris
• Código fuente (tgz)
Instalación
www.mongodb.org/downloads
• C#, .Net
• github.com/mongodb/mongo-csharp-driver (msi)
• PHP
• Windows: Extensión mongo.dll (Apache, IIS)
• Linux: pecl install mongo
• Java
• maven.org
• Soporte para frameworks: Morphia, Spring, etc.
• Python
• PyMongo: pip install pymongo
• Ruby
• gem install mongo
• Node.js
• npm install mongodb
• Otros lenguajes: C, C++, Erlang, Javascript, Perl, Scala
Drivers
www.mongodb.org/ecosystem/drivers
«MapTags»
Aplicación que permite colocar etiquetas de temas específicos en un mapa.
Código fuente:
github.com/danielsd10/demo.maptags
Funcionalidades
 Visualización de etiquetas por tipo
 Herramientas de registro
 Formulario de registro
 Almacenamiento en Base de Datos
 Detalles de una etiqueta
 Carga de imágenes a GridFS
 Edición de etiqueta
 Filtrar etiquetas
…¿Qué más le incluirían?
Integra las siguientes
tecnologías
• Versión 3 (3.12)
Google MapsAPI
developers.google.com/maps
Map
Overlays
MapTypes
Layers
Markers
Geocoder
Services
StreetView
• Librerías de apoyo:
• jQuery
• jquery-ui-map
• Bootstrap
Referencia de Librerías
jquery.com twitter.github.io/bootstrap code.google.com/p/jquery-ui-map
<html>
<head>
...
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>
<script type="text/javascript"
src="https://maps.google.com/maps/api/js?v=3.exp&sensor=false"></script>
<script type="text/javascript"
src="js/jquery.ui.map.full.min.js"></script>
...
• Objetos básicos del Driver:
• Mongo / MongoClient
• MongoDB
• MongoCollection
• MongoCursor
• MongoException
Conexión a Base de Datos
php.net/manual/es/book.mongo.php
<?php
$mongo = new MongoClient("mongodb://localhost:27017");
$db = $mongo->selectDB("maptags");
?>
• Tipos de «Tags»:
• Lugar que quiero destacar (nombre, descripción)
• Imagen o Fotografía que tomé (archivo)
• Regalo o producto que debo comprar (precio)
• Reunión con varias personas (fecha, asistentes)
• Lugar peligroso que debo evitar (radio)
• Número de colecciones: 1 !!
Colecciones
docs.mongodb.org/manual/tutorial/getting-started
{
_id: new ObjectId(«51972979d08d828815000002»),
type: «gift»,
regdate: new Date(«May 18, 2013»),
pos: {lat: -16.38919, lng: -71.54720}
title: «Tablet»,
descr: «Nexus 7, 32GB, 2GB RAM, Android Jelly Bean»,
price: «1290.00»
}
• MongoCollection
• find(array $filter, array $fields)
• findOne(array $filter)
• MongoCursor
• sort(array $fields)
• limit(int $num), skip(int $num)
• count()
Consulta de Datos
php.net/manual/es/book.mongo.php
<?php
$coll = $db->markers;
$rs = $coll->find(array(), array('type'=>1, 'pos'=>1));
$r = array();
foreach($rs as $obj) {
$r[] = $obj;
}
?>
• MongoCollection
• save(array|object $data)
• insert(array|object $data)
• remove(array $criteria)
• Objetos por tipo
• MongoId
• MongoDate
• MongoRegex
• MongoBinData
Edición de Datos
php.net/manual/es/book.mongo.php
<?php
$coll = $db->markers;
$obj = $_POST; // Solo por demostración. Nunca en producción
try {
$coll->save($obj); // ok
} catch (Exception $e) {
// error :(
}
?>
• Copias de Seguridad
• mongodump –d database –o /path/to/directory
• mongorestore –d database /path/to/directory
• mongoimport –d database –c collection < file.json
• GridFS
• Consultas Complejas
• db.col.find({field.subfield: value})
• db.col.find({field: { $gt: value1, $lt: value2 }})
• db.col.find({field: {$elemMatch:{subfield: value1 } }})
• db.col.find({$or: [{field : /^G/}, {field: /z$/}]}
• db.col.find({loc : { $near : [ 40 , 5 ] ,$maxDistance : 10} })
• Índices
• Seguridad
• Map/Reduce
• Aggregation Framework
• Permite filtrar, agrupar, transformar y ordenar documentos.
• Replica Sets
• Sharding
Otras Funcionalidades
www.mongodb.org/manual
• RockMongo
• Aplicación de PHP para consultar Bases de Datos MongoDB
• Similar a PhpMyAdmin
• rockmongo.com
• MonjaDB
• Extensión de Eclipse para consultar Bases de Datos MongoDB
• www.jumperz.net/index.php
• Consola interactiva para aprender MongoDB
• try.mongodb.org
• Capacitación para MongoDB
• education.10gen.com
@danielsd10 gplus.to/danielsd10
Happy Coding!!

NoSQL, Mongo DB & Google Maps

  • 1.
    Por: Daniel SalasDenegri CoFundador & CTO en KunanTI GDG Arequipa @danielsd10 gplus.to/danielsd10
  • 2.
    Bases de DatosNoSQL ¿Qué es NoSQL? Tipos de Bases de Datos NoSQL MongoDB Acerca de MongoDB Arquitectura Instalación Drivers para Lenguajes de Programación Aplicación de Demostración: PHP Google Maps API Librerías Conexión a Base de Datos Colecciones Consulta de Datos Edición de Datos Otras Funcionalidades y Recursos Funcionalidades de MongoDB Herramientas y Recursos
  • 3.
    • Not OnlySQL • Engloba un conjunto de Bases de Datos distintas de las bases de datos relacionales (RDBMS). • Las aplicaciones actuales deben responder a nuevas exigencias: • Grandes cantidades de información • Mayor concurrencia • Flexibilidad de los datos • Arquitecturas en la Nube • Para ciertos problemas de almacenamiento, otras tecnologías se aplican mejor. ¿Qué es NoSQL?
  • 4.
    Tipos de Basesde Datos NoSQL Key /Value Column Document Graph
  • 5.
    • "humongous" • Creadaen 2009 por 10gen • Características resaltantes • Basada en Documentos JSON (BSON) • Multiplataforma • Velocidad • Escalabilidad • Open Source • Soportada por muchos lenguajes • Utilizada por • Foursquare (Red Social) • Craiglist (Archivo de anuncios) • Intuit (Análisis en tiempo real) • MTV (CMS) www.mongodb.org www.10gen.com
  • 6.
    • Jerarquía • Basede Datos • Colecciones • Documentos • Notación JSON / BSON • Tipos soportados: String, Double, Object, Date, Null,Array, Document, ObjectID, Regex, Null. • Datos Binarios (GridFS) • Lenguaje de consultas: Javascript • Esquema • Conjunto de claves / valor • Colecciones no tienen estructura Arquitectura www.mongodb.org bsonspec.org webDB blogs users { _id: ObjectID(«12ba1154cd19»), title: «GDG Arequipa», regdate: new Date(), tags: [«db», «php»], location: {«lat»: -70, «lng»: 80} }
  • 7.
    • Última versión:2.4.3 (Abril 2013) • Versiones de 32 y 64 bits • Windows • Descargar y desempaquetar ZIP y ejecutar mongod.exe • Se puede configurar como Servicio • Intérprete de comandos: mongo.exe • Linux • Código fuente (tgz) • Instalación rápida: apt-get (deb), yum (rpm) • Intérprete de comandos: mongo • MacOS / Solaris • Código fuente (tgz) Instalación www.mongodb.org/downloads
  • 8.
    • C#, .Net •github.com/mongodb/mongo-csharp-driver (msi) • PHP • Windows: Extensión mongo.dll (Apache, IIS) • Linux: pecl install mongo • Java • maven.org • Soporte para frameworks: Morphia, Spring, etc. • Python • PyMongo: pip install pymongo • Ruby • gem install mongo • Node.js • npm install mongodb • Otros lenguajes: C, C++, Erlang, Javascript, Perl, Scala Drivers www.mongodb.org/ecosystem/drivers
  • 9.
    «MapTags» Aplicación que permitecolocar etiquetas de temas específicos en un mapa. Código fuente: github.com/danielsd10/demo.maptags Funcionalidades  Visualización de etiquetas por tipo  Herramientas de registro  Formulario de registro  Almacenamiento en Base de Datos  Detalles de una etiqueta  Carga de imágenes a GridFS  Edición de etiqueta  Filtrar etiquetas …¿Qué más le incluirían? Integra las siguientes tecnologías
  • 10.
    • Versión 3(3.12) Google MapsAPI developers.google.com/maps Map Overlays MapTypes Layers Markers Geocoder Services StreetView
  • 11.
    • Librerías deapoyo: • jQuery • jquery-ui-map • Bootstrap Referencia de Librerías jquery.com twitter.github.io/bootstrap code.google.com/p/jquery-ui-map <html> <head> ... <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/bootstrap.js"></script> <script type="text/javascript" src="https://maps.google.com/maps/api/js?v=3.exp&sensor=false"></script> <script type="text/javascript" src="js/jquery.ui.map.full.min.js"></script> ...
  • 12.
    • Objetos básicosdel Driver: • Mongo / MongoClient • MongoDB • MongoCollection • MongoCursor • MongoException Conexión a Base de Datos php.net/manual/es/book.mongo.php <?php $mongo = new MongoClient("mongodb://localhost:27017"); $db = $mongo->selectDB("maptags"); ?>
  • 13.
    • Tipos de«Tags»: • Lugar que quiero destacar (nombre, descripción) • Imagen o Fotografía que tomé (archivo) • Regalo o producto que debo comprar (precio) • Reunión con varias personas (fecha, asistentes) • Lugar peligroso que debo evitar (radio) • Número de colecciones: 1 !! Colecciones docs.mongodb.org/manual/tutorial/getting-started { _id: new ObjectId(«51972979d08d828815000002»), type: «gift», regdate: new Date(«May 18, 2013»), pos: {lat: -16.38919, lng: -71.54720} title: «Tablet», descr: «Nexus 7, 32GB, 2GB RAM, Android Jelly Bean», price: «1290.00» }
  • 14.
    • MongoCollection • find(array$filter, array $fields) • findOne(array $filter) • MongoCursor • sort(array $fields) • limit(int $num), skip(int $num) • count() Consulta de Datos php.net/manual/es/book.mongo.php <?php $coll = $db->markers; $rs = $coll->find(array(), array('type'=>1, 'pos'=>1)); $r = array(); foreach($rs as $obj) { $r[] = $obj; } ?>
  • 15.
    • MongoCollection • save(array|object$data) • insert(array|object $data) • remove(array $criteria) • Objetos por tipo • MongoId • MongoDate • MongoRegex • MongoBinData Edición de Datos php.net/manual/es/book.mongo.php <?php $coll = $db->markers; $obj = $_POST; // Solo por demostración. Nunca en producción try { $coll->save($obj); // ok } catch (Exception $e) { // error :( } ?>
  • 16.
    • Copias deSeguridad • mongodump –d database –o /path/to/directory • mongorestore –d database /path/to/directory • mongoimport –d database –c collection < file.json • GridFS • Consultas Complejas • db.col.find({field.subfield: value}) • db.col.find({field: { $gt: value1, $lt: value2 }}) • db.col.find({field: {$elemMatch:{subfield: value1 } }}) • db.col.find({$or: [{field : /^G/}, {field: /z$/}]} • db.col.find({loc : { $near : [ 40 , 5 ] ,$maxDistance : 10} }) • Índices • Seguridad • Map/Reduce • Aggregation Framework • Permite filtrar, agrupar, transformar y ordenar documentos. • Replica Sets • Sharding Otras Funcionalidades www.mongodb.org/manual
  • 17.
    • RockMongo • Aplicaciónde PHP para consultar Bases de Datos MongoDB • Similar a PhpMyAdmin • rockmongo.com • MonjaDB • Extensión de Eclipse para consultar Bases de Datos MongoDB • www.jumperz.net/index.php • Consola interactiva para aprender MongoDB • try.mongodb.org • Capacitación para MongoDB • education.10gen.com
  • 18.