未加星标

使用 Couchbase 存储 Non-JSON 数据

字体大小 | |
[数据库(综合) 所属分类 数据库(综合) | 发布者 店小二05 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏

如果你使用 Couchbase服务器 作为存储JSON文档的文档数据库的话,我相信 它的大部分功能都能得以发挥。比如,你可以使用 N1QL !然而,有些时候你需要使用Couchbase存储其它的数据。在这篇博客中,我将向你展示如何将XML和二进制数据存储到Couchbase中。我会使用.NET的SDK,但我相信其他的SDK也支持这些操作。

存储JSON文档回顾

快速地回顾一下在Couchbase中存储JSON文档的知识。一旦你有了一个bucket,你就可以使用Insert/Upsert来创建/更新一个文档,然后使用Get将文档读取出来。使用.NET SDK,你可以按照所定义的类型自动处理序列化。

//创建文档 bucket.Insert<MyType>("JSON_" + guid, new MyType { Foo = "BarJSON"}); //读取文档并显示出来 var jsonBackOut = bucket.Get<MyType>("JSON_" + guid).Value; Console.WriteLine($"JSON document: {jsonBackOut.Foo}");

存储XML

存储XML需要多做一点工作。首先,我使用XmlSerializer将对象序列化为XML字符串。然后,我将该值Insert成为一个字符串。为了将其读取出来,我再次使用xmlseralizer将其从字符串转换成为一个类型。

var xmlo = new MyType {Foo = "BarXML"}; var xml = new XmlSerializer(xmlo.GetType()); using (var textWriter = new StringWriter()) { xml.Serialize(textWriter, xmlo); bucket.Insert<string>("XML_" + guid, textWriter.ToString()); } //读取, 反序列化, var xmlBackOut = bucket.Get<string>("XML_" + guid).Value; using (var reader = new StringReader(xmlBackOut)) { var xmlObject = (MyType)xml.Deserialize(reader); Console.WriteLine($"XML: {xmlObject.Foo}"); } 存储一个字节数组序列化

接下来,我要将对象序列化为一个byte数组。不像JSON和XML,存储成一个字节数组意味着只能将该对象再次序列化成为.NET对象。

该过程类似于XML,除了Insert和Get定义的byte[]而不是string,并且我使用BinaryFormatter代替XmlSerializer。 var formatter = new BinaryFormatter(); using (var ms = new MemoryStream()) { formatter.Serialize(ms, new MyType { Foo = "BarDotNET"}); bucket.Insert<byte[]>("byte_" + guid, ms.ToArray()); } //将字节读取出来,反序列化,并显示对象 var bytesBackOut = bucket.Get<byte[]>("byte_" + guid).Value; using (var stream = new MemoryStream(bytesBackOut)) { var bytesObject = (MyType)formatter.Deserialize(stream); Console.WriteLine($".NET: {bytesObject.Foo}"); }

运行终端示例程序 ( 源代码在Github ) produces:


使用 Couchbase 存储 Non-JSON 数据

当你运行上面的示例代码后,你会看到Couchbase控制台的显示如下:


使用 Couchbase 存储 Non-JSON 数据

non-JSON文档会和JSON文档存在同一个bucket中。但正如你所看到的,Couchbase服务器并不知道如何解释它们。所以,你不能对这些文件执行大多数的N1QL操作。你不能像JSON文档那样索引它们的值。并且,在使用.NET字节数组的情况下,一个非.NET程序将根本无法解释他们。

如果你能将数值存储到JSON文档中,我推荐你这样做。但是,Couchbase服务器为你提供了存储其它类型数值的灵活性。

本文数据库(综合)相关术语:系统安全软件

分页:12
转载请注明
本文标题:使用 Couchbase 存储 Non-JSON 数据
本站链接:http://www.codesec.net/view/481968.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(综合) | 评论(0) | 阅读(51)