有谁知道如何在Riak中存储大的二进制值?

时间:2010-02-06 10:13:56

标签: binary riak

有谁知道如何在Riak中存储大的二进制值?

4 个答案:

答案 0 :(得分:4)

目前,他们不建议存储大小超过50MB的文件而不分割它们。请参阅:FAQ - Riak Wiki

如果您的文件小于50MB,那么就像在Riak中存储非二进制数据一样。

  

人们可能选择Riak的另一个原因是灵活地建模数据。 Riak将以与内容无关的方式存储您告诉它的任何数据 - 它不会强制执行表,列或参照完整性。这意味着您可以将二进制文件与更多程序员透明的格式(如JSON或XML )一起存储。使用Riak作为一种“文档数据库”(半结构化,大多数是非规范化数据)和“附件存储”将具有与键/值样式方案不同的需求 - 即,需要有效的在线查询,冲突分辨率,增加的内部语义和强大的关系表达。Schema Design in Riak - Introduction

答案 1 :(得分:0)

@Brian Mansell的答案是在正确的轨道上 - 你真的不想在Riak中存储大的二进制值(超过50 MB)作为单个对象(一段时间后集群变得非常慢)。

您有2个选项,而不是:

1)如果二进制对象足够小,则直接存储它。如果它超过某个阈值(50 MB是一个不错的任意值,但实际上,运行一些性能测试以查看平均对象大小,对于您的群集,之后它开始爬行) - 分解将文件分成几个块,并分别存储块。 (事实上​​,我见过的大多数人都走这条路,使用大小为1 MB的块)。 当然,这意味着你必须跟踪“清单” - 哪些块存储在哪里,以什么顺序存储。然后,要检索文件,首先必须获取跟踪块的对象,然后获取单个文件块并将它们重新组装回原始文件。看看像https://github.com/podados/python-riakfs这样的项目,看看他们是如何做到的。

2)或者,您可以使用Riak CS(Riak Cloud Storage)来完成上述所有操作,但代码是为您编写的。这正是RiakCS的工作原理 - 它将传入的文件分成块,存储并在普通的Riak中单独跟踪它们,并在需要时将它们重新组装回来。并提供用于文件存储的Amazon S3 API,以方便您使用。我强烈推荐这条路线(以免重新发明轮子 - 分块和跟踪文件很难)。是的,CS是付费产品,但如果您感到好奇,请查看免费Developer Trial

答案 2 :(得分:-1)

就像其他所有价值一样。为什么会有所不同?

答案 3 :(得分:-1)

使用Erlang接口(http://hg.basho.com/riak/src/461421125af9/doc/basic-client.txt)或“原始”HTTP接口(http://hg.basho.com/riak/src/tip/doc/raw-http-howto.txt)。它应该“正常工作。”

此外,您通常会在riak-users邮件列表中找到比此处更好的响应。 http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com(z8000没有冒犯,似乎也有答案。)

相关问题