nosql, mongo db & google maps
TRANSCRIPT
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?
• "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