Creo que la mayor parte del poder de Servidor Couchbase viene cuando lo utilizas como base de datos documental para almacenar documentos JSON. Puede utilizar N1QLpor ejemplo. Sin embargo, hay algunas ocasiones en las que necesitas Couchbase para almacenar algo más. En esta entrada del blog, voy a mostrarte cómo almacenar XML y datos binarios en Couchbase. Usaré el SDK .NET, pero creo que los otros SDKs también soportan estas operaciones.
Revisar el almacenamiento de documentos JSON
Un rápido repaso al almacenamiento de documentos JSON en Couchbase. Una vez que tengas un bucket, sólo tienes que utilizar Inserte
/Upsert
para crear/actualizar un documento y, a continuación, utilice Visite
para volver a sacar el documento. Con el SDK .NET, la serialización se gestiona automáticamente al tipo que especifiques.
1 2 3 4 5 |
// insertar documento cubo.Inserte("JSON_" + guía, nuevo MiTipo { Foo = "BarJSON"}); // recuperar el documento y mostrarlo var jsonBackOut = cubo.Visite("JSON_" + guía).Valor; Consola.WriteLine($"Documento JSON: {jsonBackOut.Foo}"); |
Almacenamiento de XML
Almacenar XML requiere un poco más de trabajo. Primero, seralizo un objeto en una cadena XML, usando XmlSerializer
. Entonces, yo Inserte
ese valor como cadena. Para recuperarlo, utilizo la función XmlSeralizer
de nuevo para pasar de cadena a tipo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var xmlo = nuevo MiTipo {Foo = "BarXML"}; var xml = nuevo XmlSerializer(xmlo.GetType()); utilizando (var escritor de texto = nuevo StringWriter()) { xml.Serializar(escritor de texto, xmlo); cubo.Inserte("XML_" + guía, escritor de texto.ToString()); } // recuperar el XML, deserializarlo, mostrar objeto var xmlBackOut = cubo.Visite("XML_" + guía).Valor; utilizando (var lector = nuevo Lector de cadenas(xmlBackOut)) { var xmlObject = (MiTipo)xml.Deserializar(lector); Consola.WriteLine($"XML: {xmlObject.Foo}"); } |
Almacenamiento de una serialización de matriz de bytes
A continuación, voy a serializar un objeto en un archivo byte
array. A diferencia de JSON y XML, almacenar en una matriz de bytes significa que el objeto sólo puede serializarse de nuevo en un objeto .NET.
El proceso es similar al de XML, salvo que Inserte
y Visite
especificará byte[]
en lugar de cadena
y estoy utilizando el BinaryFormatter
en lugar de XmlSerializer
.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var formateador = nuevo BinaryFormatter(); utilizando (var ms = nuevo MemoryStream()) { formateador.Serializar(ms, nuevo MiTipo { Foo = "BarDotNET"}); cubo.Inserte("byte_" + guía, ms.ToArray()); } // recuperar los bytes, deserializarlos, mostrar objeto var bytesBackOut = cubo.Visite("byte_" + guía).Valor; utilizando (var flujo = nuevo MemoryStream(bytesBackOut)) { var bytesObjeto = (MiTipo)formateador.Deserializar(flujo); Consola.WriteLine($".NET: {bytesObject.Foo}"); } |
Resumen
Ejecutar el programa de consola de ejemplo (El código fuente está disponible en Github) produce:
Después de ejecutar los ejemplos de código anteriores, esto es lo que verás en la consola de Couchbase:
Los documentos no JSON existen en el mismo bucket que los documentos JSON. Pero como puedes ver, Couchbase Server no sabe cómo interpretarlos. Así que no podrás realizar la mayoría de las operaciones N1QL en estos documentos. No puedes indexar sus valores como en un documento JSON. Y, en el caso de la matriz de bytes .NET, un programa que no sea .NET no podrá interpretarlos en absoluto.
Si puedes almacenar tus valores en JSON, te lo recomiendo. Pero Couchbase Server te da la flexibilidad de almacenar otros tipos de valores.
¿Tienes preguntas? ¿Necesitas ayuda con Couchbase Server? Consulta el Foros de Couchbase o Sígame en Twitter.