Etiquetas

, ,

Mongo es conocido como una alternativa para el desarrollo de bases de datos bajo la filosofía NoSql, el movimiento NoSql nacio en San Francisco de la mano de un conjunto de personas que no estaban conformes con el actual rendimiento que ofrecen las based de datos relacionales y por lo tanto se proponian dar alternativas mas eficaces y menos costosas que pudieran dar solución a las nuevas aplicaciones web 2.0 que manejan millones de transacciones simultáneamente y en tiempo real, así empezaron a surgir diferentes alternativas a las bases de datos relacionales tradicionales (ORACLE, MySql, Sql Server, etc), como la desarrollada por Facebook, Cassandra, la cual segun ingenieros de Facebook puede escribir hasta 50GB de datos en disco en 0.12 milisegundos, más de 2500 veces más rápido que MySQL. Asi fueron surgiendo otras alternativas desarrolladas casi siempre por los grandes de la web, Amazon desarrollo Dynamo, Goolge desarrollo BigTable y asi surgieron otros como Hadoop, Voldemort, Dynomite y la solución de la que hablare hoy MongoDb.

MongoDb es un sistema de bases de datos orientado a documentos que utilizan el modelo BSON  (binary JSON) , al ser una base de datos no relacional no existen los Join sino que lo datos se almacena en un sistema Key/value donde la clave es una cadena y el valor cualquier cosa incluyendo otros documentos de manera que la información puede permanecer como una estructura anidada de documentos. Actualmente existen diversas empresas utlizando MongoDb en sus sistemas de produccion, algunas de ellas son EA, SourceForge y The New York Times.

Por otro lado la instalación de MongoDb es bastante sencilla, basta con descargar los archivos de instalación que pueden descargar aqui y ejecutar ubicándonos en el directorio donde hemos descomprimido los archivos  el comando mongod –dbpath <directorio de los datos>. Luego para poder empezar a utilizar mongoDB en nuestra aplicacion .NET debemos descargarnos los driver para .net desde este enlace, los archivos que nos descarguemos incluyen el código fuente de los driver y otros proyectos que nos proporcionan un API de desarrollo que incluye librerias para el uso de LINQ, adema un proyecto de ejemplo que muestra lo sencillo que es empezar a utilizar MongoDb.

A continuación dejo el código fuente del del ejemplo que viene con la descarga de los driver para que le den un vistazo y se hagan una idea de su funcionamiento.


using System;
using System.Configuration;
using MongoDB.Driver;
namespace Simple
{
/// <summary>
/// Illustrates some simple operations on the database.
/// Creating a database connection.
/// Remove some documents.
/// Insert some documents
/// Find one document
/// Find several documents and iterate through them.
/// </summary>
class MainClass
{
Mongo mongo;
Database simple;
IMongoCollection categories;
public static void Main (string[] args){
MainClass main = new MainClass();
main.Setup();
main.Run();
}
/// <summary>
/// Setup the collection and insert some data into it.
/// </summary>
public void Setup(){
string connstr = ConfigurationManager.AppSettings["simple"];
if(String.IsNullOrEmpty(connstr)) throw new ArgumentNullException("Connection string not found.");
mongo = new Mongo(connstr);
mongo.Connect();
simple = mongo["simple"];
categories = simple["categories"];
Clean();
var names = new string[]{"Bluez", "Jazz", "Classical", "Rock", "Oldies", "Heavy Metal"};
foreach(string name in names){
categories.Insert(new Document(){{"name", name}});
}
}
public void Clean(){
categories.Delete(new Document(){{"name", "Jazz"}}); //remove documents with the name Jazz.
categories.Delete(new Document()); //remove everything from the categories collection.
}
public void Run(){
var category = categories.FindOne(new Document { { "name", "Bluez" } });
Console.WriteLine ("The id findOne" + category["_id"]);
Document selector = new Document(){{"_id", category["_id"]}};
category["name"] = "Bluess";
//The following will do the same thing.
categories.Update(category);
Console.WriteLine("Category after one update " + categories.FindOne(selector).ToString());
category["name"] = "Blues";
categories.Update(category, selector);
Console.WriteLine("Category after two updates " + categories.FindOne(selector).ToString());
//Find it by _id that has been converted to a string now.
string id = ((Oid)category["_id"]).ToString();
Console.WriteLine("Found by string id converted back to Oid");
Console.WriteLine(categories.FindOne(new Document(){{"_id", id.ToOid()}}));
//Find(new Document()) is equivalent to FindAll();
//Specifying the cursor in a using block will close it on the server if we decide not
//to iterate through the whole thing.
using(ICursor all = categories.Find(new Document())){
foreach(Document doc in all.Documents){
Console.WriteLine(doc.ToString());
}
}
mongo.Disconnect();
}
}
}
public static class OidExtensions
{
public static Oid ToOid (this string str){
if (str.Length == 24)
return new Oid (str);
return new Oid (str.Replace ("\"", ""));
}
}