NoSQL no tiene por qué ser difícil. En general, no lo es. Pero hay que admitir, y especialmente en Windows, que no siempre es tan limpio como podría ser. Cada base de datos tiene sus retos. Algunas son difíciles de instalar. Algunas son difíciles de configurar. Algunas tienen herramientas de administración de servidor deficientes. Algunas carecen de un sólido soporte de bibliotecas cliente. Una de las ofertas NoSQL que realmente hace las cosas bien es Couchbase Server. De acuerdo, esta es mi primera entrada en dllHell (donde este post apareció originalmente) como Developer Advocate de Couchbase.

Couchbase se formó cuando Membase y CouchOne se fusionaron. Couchbase Server 2.0 será una base de datos NoSQL híbrida, que combinará características tanto de los almacenes distribuidos de claves/valores como de las bases de datos orientadas a documentos. El producto 2.0 se lanzará en 2012. En enero de 2012, una versión provisional 1.8 será la primera versión oficial del Couchbase Server fusionado, anteriormente Membase Server. Como parte de mis responsabilidades en Couchbase, estoy trabajando en la librería cliente .NET para Couchbase Server 1.8. Abajo hay un adelanto de lo que viene. Si has usado Membase Server con .NET, deberías estar familiarizado con el código de abajo. Si eres nuevo en Couchbase Server, voy a empezar desde el principio.

Instalación de Couchbase Server

La mayoría de las bases de datos NoSQL tienen instaladores para Windows, aunque a veces no se mantienen actualizados. En el caso de CouchDB, hay un par de paquetes MSI diferentes disponibles, pero solo uno funciona (al menos en octubre de 2011). MongoDB tiene un instalador de línea de comandos para su servicio. Couchbase Server, afortunadamente, tiene un instalador para Windows con soporte oficial. Puedes descargar el último instalador aquí. Mientras escribo esto, la última versión del servidor es la 1.7.2. Vuelve más tarde en enero para la 1.8. Consigue la Edición Comunitaria de Membase Server, que es apropiada para propósitos de desarrollo. Membase Server pasará a llamarse Couchbase Server con el lanzamiento de la versión 1.8. También puedes hacerte con la versión 2.0 Developer Preview, que ya luce el nuevo nombre.
Tras ejecutar el instalador, accederás a la consola de administración basada en web. La consola de administración es donde podrás configurar tu clúster y gestionar los nodos dentro de ese clúster. En el desarrollo local, es probable que tenga un clúster de un solo nodo (por ejemplo, su máquina de desarrollo).
 windows-web-admin
Una vez que tengas el servidor funcionando, es hora de escribir algo de código. Si creas una simple aplicación de consola, la forma más fácil de incluir la librería cliente .NET de Couchbase en tu aplicación es usar Nuget. Después de añadir la referencia, añade la siguiente sentencia using:
 nuget
utilizando Couchbase;
A continuación, añada la siguiente línea a su método Main:
estático void Principal(cadena[] args) {
var cliente =nuevo CouchbaseClient();
}

Después de añadir estas líneas, compila la aplicación. Probablemente obtendrás un extraño error de compilación diciendo que el namespace 'Couchbase' no puede ser encontrado. La razón por la que verás este error es que Visual Studio 2010 (asumo que estás utilizando 2010) hace que los proyectos de consola utilicen por defecto el perfil de cliente .NET 4, que es un subconjunto de .NET 4. Tendrás que actualizar la versión de .NET a .NET 4.0 (o 3.5). Después de realizar este cambio, podrá compilar.

net-version-selector

 

A continuación, tendrás que añadir algo de información de configuración a tu app.config. El archivo completo debe tener el siguiente aspecto:

<configuración>
<configSecciones>
<sección nombre="membase" tipo="Couchbase.Configuration.CouchbaseClientSection, Couchbase"/>
>
<membase>
<servidores cubo="por defecto" bucketPassword=“”>
<añadir uri="http://127.0.0.1:8091/pools/default"/>
>
>
>
En la sección config, proporcionas al cliente detalles sobre cómo conectarse y dónde se escribirán los datos. Para decirle a CouchbaseClient que use la sección app.config, actualiza la declaración como sigue:
var cliente =nuevo CouchbaseClient("membase");
Guardar y leer tipos de datos primitivos es tan fácil como guardar y leer tipos definidos por el usuario. Así que voy a crear un par de clases Brewery y Beer (intencionadamente simplificadas).

[Serializable]
público clase Cervecería {
público cadena Nombre { consiga; configure; }
público cadena Ciudad { consiga; configure; }
público cadena Estado { consiga; configure; }
}

[Serializable]
público clase Cerveza {
público cadena Nombre { consiga; configure; }
público Cervecería { consiga; configure; }
público decimal ABV { consiga; configure; }
}

Estas clases son simplemente POCOs (Plain Old CLR Objects) que han sido marcadas como Serializables. Voy a crear una instancia de cada una en mi método Main.

var cervecería =nuevo Cervecería {
Ciudad = "Hartford",
Estado = "CT",
Nombre = "Cervecería Thomas Hooker"
};

var cerveza =nuevo Cerveza {
Cervecería = cervecería,
Nombre = "American Pale Ale",
ABV = 5.3m
};

A continuación, persistiré la instancia de Beer llamando al método Store del cliente. Ten en cuenta que el StoreMode requiere que se añada la sentencia using adicional para Enyim.Caching.Memcached.

client.Store(StoreMode.Set, beer.Name, beer);
Después de almacenarla, volveré a leer la Cerveza y mostraré su nombre.
var CervezaGuardada = cliente.Visite<Cerveza>("cerveza"); Consola.WriteLine(savedBeer.Nombre);
Y eso es todo, endiabladamente fácil, ¿verdad? Hay que admitir que esta es una introducción muy simplificada a Couchbase Server. Como ahora me estoy haciendo cargo de la librería de clientes .NET, iré publicando tutoriales y ejemplos más detallados.

Autor

Publicado por John Zablocki, Desarrollador NET. Desarrollador SDK, Couchbase

John Zablocki es desarrollador de NET. SDK en Couchbase. John es también el organizador de Beantown ALT.NET y antiguo profesor adjunto en la Universidad de Fairfield. También puedes consultar el libro en Amazon llamado "Couchbase Essentials" que explica cómo instalar y configurar Couchbase Server.

8 Comentarios

  1. Espero con impaciencia CBS 2.0. Esta biblioteca de clientes, ¿se basa en el código de Enyim o es completamente nueva?

    1. Hola Claus,

      El cliente seguirá utilizando el código base de Enyim. Con CBS 2.0, el cliente evolucionará para soportar la nueva funcionalidad del servidor, como las vistas. Cuando se publique CBS 1.8, tendremos documentos actualizados que cubran los cambios a corto plazo en el cliente.

      - Juan

  2. Tendrías que hacer un client.Get(\"American Pale Ale\"), ¿verdad?

    1. Sí, pero .... el ejemplo no es válido porque no se puede tener \ "\" espacios en la clave

  3. ¿Cómo se configuran los distintos buckets para que se pueda acceder a ellos desde el mismo cliente .net?

    1.  Hola Brad,

      Desafortunadamente, eso no está soportado en el cliente hoy en día. Tendrías que crear una segunda instancia del cliente. Hay una configuración por cliente y cada configuración sólo admite un único cubo. 

      - Juan

      1. Sólo para aclarar: ¿estás diciendo que uno necesitaría otra instancia de la aplicación cliente ejecutándose o que necesitarías crear otra instancia de la clase CouchbaseClient? La segunda opción me parece aceptable, pero no me queda claro cómo configurar mis buckets e instanciar las instancias de CouchbaseClient para usar el bucket correcto.

        1.  Necesitarías una segunda instancia de CouchbaseClient - cada instancia está vinculada a un único bucket. Hay un par de opciones para config...

          Lo más fácil sería utilizar la configuración programática. Tengo un ejemplo en - https://github.com/couchbase/c.... Tenga en cuenta que esta configuración es para Couchbase Server DP3+, por lo que si está utilizando el servidor 1.8 con el cliente 1.0 los ajustes después de las Urls no se aplican. 

          La otra opción es crear dos secciones config en app.config (o web.config). Tendrías que hacer algo como la configuración de abajo. Tendrías que configurar tus clientes con nombres de sección en el constructor.

          Hazme saber si eso ayuda...

          var clientA = new CouchbaseClient(\"bucketA\");
          var clientB = new CouchbaseClient(\"bucketB\");

          <configuration>
            <configsections>
             


             

            </configsections>
            <bucketa>
              <servers bucket=\”default\” bucketpassword=\”\”>
                <add uri=\”http://192.168.0.2:8091/pools/default\”/>
                <add uri=\”http://192.168.0.3:8091/pools/default\”/>
              </servers>  </bucketa>  <bucketb>
              <servers bucket=\”otherBucket\” bucketpassword=\”\”>
                <add uri=\”http://192.168.0.2:8091/pools/default\”/>
                <add uri=\”http://192.168.0.3:8091/pools/default\”/>
              </servers>
            </bucketb>
          </configuration>

Dejar una respuesta