在无架构数据库中使用协议缓冲区进行序列化

时间:2010-11-25 01:11:12

标签: mysql nosql relational-database protocol-buffers schemaless

4 个答案:

答案 0 :(得分:3)

正如您所发现的,MongoDB和CouchDB对如何存储数据有强烈的意见。如果您正在寻找与存储无关的方法,那么您需要做一些像@Joshua建议并查看Cassandra或HBase的内容。即使这两个数据存储区也有关于如何存储数据的意见(它们都基于Google's Bigtable)并将数据存储在column families中。

Riak使用协议缓冲区作为将数据从应用程序序列化到数据存储区的一种方法。可能值得一试,看看它是否符合您的需求。您似乎主要计划进行单键查找,因此Riak可能是您解决方案的有力竞争者。

答案 1 :(得分:1)

您可能希望查看类似Cassandra或HBase的内容来存储数据。不透明数据blob的问题在于,您无法在此基于MySQL模式进行查询。如果你正在寻找一些东西,你必须阅读每一个blob并检查它。如果这对于你如何进行查找真的不重要(即你总是关键),那么我建议使用协议缓冲区来序列化数据,可能使用zlib或LZO压缩进行压缩。

协议缓冲区允许您创建一个简单的数据结构,可以随着数据的发展接受其他字段。字段名称存储为数字,代码与代码一起使用是从.proto文件自动生成的。性能良好,数据大小保持很小。您可以选择使用MySQL compress()或此处汇总的实时压缩库(不仅仅是Java)来压缩数据:

Fast compression in Java?

希望这有帮助。

答案 2 :(得分:1)

PostgreSQL现在有一个JSON类型:http://www.postgresql.org/docs/9.3/static/datatype-json.html

您可以在“达到”这些值的位置进行查询。

将Protobuf转换为JSON应该很容易。

答案 3 :(得分:0)

我会推荐你​​几个月前提出的一个类似主题的回答。我们使用MySQL和自定义文本格式,证明比XML或JSON格式更快:

What scalability problems have you encountered using a NoSQL data store?

为我们工作得很好。但是没有尝试使用Protocol Buffers。