Louder Developer Zone
Articles, Tutorials and Tips from the community and Louder developers

Usando MongoDB en KEF

Publish at Monday, March 08, 2010
By Core Developers - Louder

En el siguiente tutorial vamos a ver como usar Kumbia Enterprise Framework (KEF) con una base de datos NoSQL. Una de ellas es MongoDB, una base de datos de alto rendimiento, de código abierto y de esquema-libre orientada a documentos (schema-free document-oriented).

Una explicación corta de la instalación en varias plataformas puede encontrarse aqui.

Uso de MongoDB en PHP

Una extensión PECL está disponible para conectarse a MongoDB nativamente. En un sistema Unix puede instalarse mediante el comando:

sudo pecl install mongo
El PHP Language Center contiene información diversa relacionada con MongoDB y PHP.

Crear datos de Prueba

Una vez instalado MongoDB es posible crear algunos datos de prueba:

bash# mongo prueba
MongoDB shell version: 1.2.4
url: prueba
connecting to: prueba
type "help" for help
> use prueba
switched to db prueba
> db.noticias.save({"titulo":"Trabajando con MongoDB", "autor": "Antonio"})
> db.noticias.save({"titulo":"Otra noticia importante", "autor": "Carolina"})
> exit

Así hemos creado 2 registros en "noticias" y sus datos de titulo y autor respectivos.

Luego consultamos las "noticias" creadas:

> db.noticias.find()
{ "_id" : ObjectId("4b948d43394e2e0260dc890f"), "titulo" : "Trabajando con MongoDB", "autor" : "Antonio" }
{ "_id" : ObjectId("4b948dc1394e2e0260dc8910"), "titulo" : "Otra noticia importante", "autor" : "Carolina" }

Usando el ObjectId tambien puede consultarse un objeto:

> db.noticias.find({_id:ObjectId("4b948dc1394e2e0260dc8910")})
{ "_id" : ObjectId("4b948dc1394e2e0260dc8910"), "titulo" : "Otra noticia importante", "autor" : "Carolina" }

Configurando PHP para MongoDB

Una vez instalada la extensión PECL para PHP se debe hacer la siguiente configuración en el php.ini:

extension=mongo.so
mongo.default_host = localhost
mongo.default_port = 27017

Luego se debe reiniciar el servidor web que se está usando para que se tome la nueva configuración.

NoSQL en Kumbia Enterprise

Kumbia Enterprise en su versión 1.7.1 agrega soporte para una nueva capa de acceso a base de datos llamada NoSQL. El componente DbBase permite el acceso a bases de datos sin requerir SQL, las bases de datos obviamente no requieren de él. Sin embargo el punto es que gracias a esto tanto bases de datos SQL y NoSQL pueden ser usadas con cambios mínimos en la configuración.

Familiarizarse con bases de datos NoSQL

Las bases de datos de esquema-libre orientada a documentos manejan un paradigma distinto al de las habituales bases de datos relacionales. Sin embargo para familiarizarse un poco con los nuevos conceptos y forma de trabajo podemos empezar por decir:

  • Bases de Datos El concepto es mismo de una base de datos relacional. Tienen un nombre que permiten identificarlas. En el caso de MongoDB algunos nombres pueden no muy casuales: "null", "[x,y]", "3", "\"", ó "/".
  • Tablas Las tablas se llaman colecciones (collections). Más información sobre "Collections"
  • Campos Los campos son atributos de las colecciones. Cada "registro" en una colección puede tener distintos campos. El único campo que está presente en todas las colecciones es "id" que es un hash automático que permite identificar el registro de forma única en la colección. Los campos pueden tener todo tipo de carácteres incluyendo espacios.
  • Registros Los registros son llamados documentos. Las columnas son llaves que referencian un valor.

Configurar MongoDb con Kumbia Enterprise

Para configurar una conexión es necesario colocar lo siguiente en el environment.ini:

[development]
database.layer = nosql
database.type = mongo
database.host = localhost
database.port = 27017
database.name = prueba

La variable database.layer le indica a KEF que se va a usar una base de datos NoSQL. Las opciones database.host y database.port son opcionales en caso de que sean localhost y 27017 que son los valores defecto. Con la anterior configuración se va a poder obtener una conexión a la base de datos con un punto de configuración único.

Consultar, Actualizar, Eliminar

En el siguiente ejemplo se van a hacer las operaciones básicas sobre una colección (consultar, insertar, actualizar, eliminar):


//Obtener una conexión según como esté en environment.ini
$database = Db::rawConnect();

//Listar las colecciones en la base de datos
foreach($database->listTables() as $collection){
    echo $collection, "<br/>\n";
}

//Consultar todas las noticias
$noticias = $database->find("noticias");
foreach($noticias as $id => $noticia){
    echo "Id=", $id, " Titulo=", $noticia["titulo"], " Autor=", $noticia["autor"], "<br/>\n";
}

//Consultar todas las noticias cuyo autor sea "Carolina"
$noticias = $database->find("noticias", array("autor" => "Carolina"));

//Insertar un "documento"
$noticia = array(
    "autor" => "Antonio",
    "titulo" => "Otra noticia de ejemplo"
);
$database->insert("noticias", $noticia);

//Visualizar el ID de la noticia creada
echo $noticia["_id"], "<br/>\n";

//Actualizar la noticia
$condiciones = array("_id" => $noticia["_id"]);
$valoresActualizar = array("titulo" => "Cambiar por este titulo");
$database->update("noticias", null, $valoresActualizar, $condiciones);

//Eliminar la noticia
$condiciones = array("_id" => $noticia["_id"]);
$database->delete("noticias", $condiciones);

Conclusiones

Kumbia Enterprise ofrece una sencilla API a esta base de datos NoSQL y aprovechar todas sus bondades.

En el grupo de discusión es posible hacer preguntas y dar comentarios sobre este artículo.

Enlaces Externos



blog comments powered by Disqus

Previous: Introducción al componente Linguistics

Colaborate

Colaborate

We invite you to submit articles and tutorials to the Developer Zone.

Archive

  • Mayo 2009

Maybe you are interested

Added value to your Business.

Become a Solution Partner Louder Now.

Bring to the Open-Source retroactively..

Learn more about Shared Louder Labs