Archivo por de la categoria 'BBDD'

Introducción a las bases de datos NoSQL: MongoDB

Nov 09 2011 Autor: J.P Aulet under BBDD,Internet,PHP

NoSQL (del inglés ‘Not Only SQL‘) es una filosofía de sistemas de gestión de bases de datos que modifican por completo el modelo clásico de bases de datos relacionales (en inglés, RDBMS o ‘Relational Database Management System‘). Esta nueva forma de trabajar responde a otra forma de organización de los datos que permiten una menor rigidez de los datos y formas novedosas de trabajo. Las características comunes entre las implementaciones de bases de datos distribuidas no relacionales o NoSQL son las siguientes:

  • Consistencia: No se implementan mecanismos rígidos de consistencia como los presentes en las bases de datos relacionales, donde la confirmación de un cambio implica una comunicación del mismo a todos los nodos que lo repliquen. Las bases de datos NoSQL son ACID, esto significa que una transacción cumple lo siguiente:
    • Atomicidad: es la propiedad que asegura que la operación se ha realizado o no, y por lo tanto ante un fallo del sistema no puede quedar a medias.
    • Consistencia: es la propiedad que asegura que sólo se empieza aquello que se puede acabar. Por lo tanto se ejecutan aquellas operaciones que no van a romper la reglas y directrices de integridad de la base de datos.
    • Aislamiento: es la propiedad que asegura que una operación no puede afectar a otras. Esto asegura que la realización de dos transacciones sobre la misma información sean independientes y no generen ningún tipo de error.
    • Durabilidad: es la propiedad que asegura que una vez realizada la operación, ésta persistirá y no se podrá deshacer aunque falle el sistema.
  • Estructura distribuida: Generalmente se distribuyen los datos mediante mecanismos de tablas de hash distribuidas como las redes P2P.
  • Escalabilidad Horizontal: La implementación típica se realiza en muchos nodos de capacidad de procesado limitado, en vez de utilizar grandes ‘mainframes‘.
  • Tolerancia a fallos (debido a la estructura ACID), redundancia y sin cuellos de botella.

Existen diferentes tipos de bases de datos NoSQL, estos son los tipos principales:

  • Documentales (basadas en documentos): CouchDb, MongoDB y IBM Lotus.
  • Grafos: Neo4j y AllegroGraph
  • Clave-Valor: Cassandra, BigTable y Dynamo.
  • Tablulares: HBase y BigTable.

En nuestro caso nos centraremos en MongoDb.

MongoDB

La estructura principal y fundamental que debemos recordar es la siguiente (con el equivalente a una BBDD con filosofia SQL), ordenada jerárquicamente:

nosql databases Introducción a las bases de datos NoSQL: MongoDB

Bases de Datos NoSQL

- Server //Servidor
  - Database //Base de Datos
    - Collection (table)  //Tabla
       - Document (BSON; like a row)  //Fila
          - Fields (columns)  //Columna

.

Y las características principales a recordar son:
  • Las consultas son a nivel de ‘collection‘ (sin joins)
  • Los índices se generan en las ‘collection
  • Los documentos tienen una ID única
  • La ‘atomicidad’ es a nivel de ‘document‘.

MongoDB ofrece además una serie de métodos y herramientas novedosos para hacer consultas (querying) y operaciones de una forma muy senzilla y muy optimizado. Estos son:

Consultas:

• Permite consultas dinámicas (código JavaScript o objetos)
• 'Map/Reduce' (funciones JavaScript)
• Creación de indices secundarios (B-tree, R-tree, etc.)

Operaciones:

• Replicación
• Master/Slave
• Herramientas útiles: mongo shell, mongostat, mongo{dump,restore,export,import}

Ahora vamos a ver un ejemplo real de como trabajar en MongoDb, en nuestro caso explicaremos como trabajar con MongoDB con el lenguaje de programación PHP, que incluye esta base de datos como una librería nativa (PHP Mongo Native Driver).

La mayoria de frameworks por PHP soportan esta BBDD e incluyen librerias para trabajar con ella, aquí un listado:

CakePHP, Codeigniter, Doctrine, Drupal, Kohana, Lithium, Memcached, Symfony 2, Yii y Zend Framework

Introducción a MongoDB + PHP:

Establecimiento de una conexión

Para conectarse a mongo y seleccionar una base de datos se utiliza, por ejemplo:

$connection = new Mongo (); / / se conecta a localhost: 27017
$connection = new Mongo (“sindikos.com”); / / conectarse a un host remoto (puerto por defecto)
$connection = new Mongo (“sindikos.com: 65432″); / / conectarse a un host remoto en un puerto
$db = $connection-> selectDB (“db”); // Trabajar con ‘db’
$db = $connection-> selectDB (“otradb”); //Cambio de BBDD a ‘otradb’

Seguir leyendo »

Comments Off