Acredito que a maior parte do poder de Servidor Couchbase vem quando você o usa como um banco de dados de documentos para armazenar documentos JSON. Você pode usar N1QLpor exemplo! No entanto, há ocasiões em que você precisa do Couchbase para armazenar outra coisa. Nesta postagem do blog, mostrarei como armazenar dados XML e binários no Couchbase. Usarei o SDK do .NET, mas acredito que os outros SDKs também ofereçam suporte a essas operações.
Revisão do armazenamento de documentos JSON
Uma rápida revisão do armazenamento de documentos JSON no Couchbase. Depois de ter um bucket, você pode simplesmente usar Inserir/Upsert para criar/atualizar um documento e, em seguida, usar Obter para obter o documento de volta. Com o SDK do .NET, a serialização é tratada automaticamente para o tipo que você especificar.
|
1 2 3 4 5 |
// inserir documento balde.Inserir("JSON_" + guia, novo MyType { Foo = "BarJSON"}); // recuperar o documento e exibi-lo var jsonBackOut = balde.Obter("JSON_" + guia).Valor; Console.WriteLine($"Documento JSON: {jsonBackOut.Foo}"); |
Armazenamento de XML
O armazenamento de XML exige um pouco mais de trabalho. Primeiro, eu seralizo um objeto em uma string XML, usando XmlSerializer. Então, eu Inserir esse valor como uma string. Para recuperá-lo, uso o comando XmlSeralizador novamente para passar de string para um tipo.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var xmlo = novo MyType {Foo = "BarXML"}; var xml = novo XmlSerializer(xmlo.GetType()); usando (var textWriter = novo Escritor de strings()) { xml.Serializar(textWriter, xmlo); balde.Inserir("XML_" + guia, textWriter.ToString()); } // obter o XML de volta, desserializá-lo e exibir o objeto var xmlBackOut = balde.Obter("XML_" + guia).Valor; usando (var leitor = novo StringReader(xmlBackOut)) { var xmlObject = (MyType)xml.Deserializar(leitor); Console.WriteLine($"XML: {xmlObject.Foo}"); } |
Armazenamento de uma serialização de matriz de bytes
Em seguida, vou serializar um objeto em um objeto byte matriz. Ao contrário do JSON e do XML, o armazenamento em uma matriz de bytes significa que o objeto só pode ser serializado novamente em um objeto .NET.
O processo é semelhante ao XML, exceto Inserir e Obter especificará byte[] em vez de stringe estou usando o BinaryFormatter em vez de XmlSerializer.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var formatador = novo BinaryFormatter(); usando (var ms = novo Fluxo de memória()) { formatador.Serializar(ms, novo MyType { Foo = "BarDotNET"}); balde.Inserir("byte_" + guia, ms.ToArray()); } // recuperar os bytes, desserializá-los e exibir o objeto var bytesBackOut = balde.Obter("byte_" + guia).Valor; usando (var fluxo = novo Fluxo de memória(bytesBackOut)) { var bytesObject = (MyType)formatador.Deserializar(fluxo); Console.WriteLine($".NET: {bytesObject.Foo}"); } |
Resumo
Executar o programa de console de amostra (O código-fonte está disponível no Github) produz:

Depois de executar os exemplos de código acima, isso é o que você verá no Console do Couchbase:

Os documentos não JSON existem no mesmo bucket que os documentos JSON. Mas, como você pode ver, o Couchbase Server não sabe como interpretá-los. Portanto, você não poderá executar a maioria das operações N1QL nesses documentos. Não é possível indexar seus valores como em um documento JSON. E, no caso da matriz de bytes .NET, um programa que não seja .NET não conseguirá interpretá-los de forma alguma.
Se você puder armazenar seus valores em JSON, eu o recomendaria. Mas o Couchbase Server lhe dá a flexibilidade de armazenar outros tipos de valores.
Tem dúvidas? Precisa de ajuda com o Couchbase Server? Dê uma olhada na seção Fóruns do Couchbase ou Siga-me no Twitter.