Ver Mensaje Individual
  #2 (permalink)  
Antiguo 02/10/2010, 14:21
enridp
 
Fecha de Ingreso: mayo-2005
Mensajes: 284
Antigüedad: 19 años
Puntos: 11
Respuesta: Base de Datos NOSQL (MongoDB)

Bueno arranco yo con algunas cosas que fui aprendiendo a ver si alguien se anima a agregar más.

NoSQL viene de Not Only SQL, yn en realidad se debería llamar Not Only Relaciones, porque lo que trata de evitar es la estructura de tablas y relaciones en las base de datos "comunes" (en su mayoria SQL).

Por qué? porque por lo general escribimos en lenguajes orientados a OBJETOS, no relaciones y tablas. De hecho a todos nos ha pasado que terminamos programando en 2 lenguajes bien diferentes, uno el orientado a objetos (PHP, por ej.) y el otro SQL, donde tenemos que organizar nuestros datos en tablas y relaciones bien diferentes a los objetos que manejamos.

Por ej. Si tenemos un objeto "Persona" y una persona puede tener un nombre, una direccion y varios teléfonos. Esto en OO (Orientado a Objetos) es una clase persona, con un string nombre, un string direccion y un array de Number para los teléfonos.
Pero en la base de datos tenemos que normalizar porque no podemos guardar ese Array, asique tenemos 2 tablas, una Personas y otra Telefonos (que tiene una FK a persona).

Para solucionar esta "discrepancia" entre los objetos y las tablas se inventaron los ORM (ActiveRecords como uno de los patterns mas comunes), que en PHP hay varios (Propel, Doctrina, etc.).
Lo que hace un ORM es basicamente armar las consultas SQL "por atrás" asi nosotros manejamos siempre objetos (el ORM convierte ese objeto a las consultas SQL que necesita).

Los lenguajes NoSQL, de los cuales los más comunes son los basados en Documentos, lo que hacen es guardar "objetos" directamente. Agrupados en Colecciones no tablas.
No es necesario ni siquiera definir ningún esquema. En las BD SQL tenemos que primer armar las tablas, definir cuantos campos tiene, de que tipo es cada campo, etc.
Con NoSQL guardamos un objeto con las propiedades que querramos y listo. Sin avisar siquiera de que tipo son ni nada.

Un ejemplo de un documento que podriamos guardar en una coleccion "Articulos":
Cita:
<?php
array(
'title' => 'Hello World',
'authors' => array('John', 'Sally', 'Jim'),
'body' => 'Hello world',
'tags' => array('tag1', 'tag2', 'tag3')
);
?>
Esto hace que las consultas sean más sencillas (tambien menos poderosas, es decir no podemos hacer grandes filtrados o calculos como en SQL).

Otra de las grandes ventajas de NoSQL es que escala muy bien, es por eso de hecho que sitios como Facebook, Twitter e incluso Google usan este tipo de bases de datos.
Porque manejan muchisima informacion y mantener una BD en muchos servidores con SQL puede ser bastante complejo y costoso, pero con estas NoSQL no.

Tambien suelen ser mas rapidas para consultas de lectura y escritura básicas. Porque no tienen todo el procesado previo del SQL, ni respetan el ACID.
Esto ultimo es justamente lo que puede llegar a decidir si usamos SQL o NoSQL, porque si necesitamos transacciones y que la integridad de la BD sea perfecta (por ej. en operaciones bancarias), entonces necesitamos SQL.
Pero cuando esto no es de vital importancia usar NoSQL puede darnos una gran ventaja en cuanto a performance y escalabilidad.