NoSQL, Mongo DB & Google Maps

18
MongoDB + Google Maps Por: Daniel Salas Denegri CoFundador & CTO en KunanTI GDG Arequipa @danielsd10 gplus.to/danielsd10

Transcript of NoSQL, Mongo DB & Google Maps

MongoDB + Google Maps

Por: Daniel Salas DenegriCoFundador & CTO en KunanTI

GDG Arequipa

@danielsd10 gplus.to/danielsd10

ContenidoBases de Datos NoSQL

¿Qué es NoSQL?Tipos de Bases de Datos NoSQL

MongoDBAcerca de MongoDBArquitecturaInstalaciónDrivers para Lenguajes de Programación

Aplicación de Demostración: PHPGoogle Maps APILibrerías Conexión a Base de DatosColeccionesConsulta de DatosEdición de Datos

Otras Funcionalidades y RecursosFuncionalidades de MongoDBHerramientas y Recursos

NoSQL

• 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?

NoSQLTipos 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

Aplicación de Demostración«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

Aplicación de Demostración

• Versión 3 (3.12)

Google Maps API

developers.google.com/maps

Map

Overlays

Map Types

Layers

Markers

Geocoder

Services

StreetView

Aplicación de Demostración

• 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>

...

Aplicación de Demostración

• 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");

?>

Aplicación de Demostración

• 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»

}

Aplicación de Demostración

• 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;}

?>

Aplicación de Demostración

• 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óntry {

$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

Recursos Adicionales• 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

Gracias…

@danielsd10 gplus.to/danielsd10

Happy Coding!!