0

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

4

4 回答 4

4

目前,他们不建议在不拆分文件的情况下存储大于 50MB 的文件。请参阅:常见问题解答 - Riak Wiki

如果您的文件小于 50MB,则继续在 Riak 中存储非二进制数据。

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

于 2010-08-06T19:38:23.843 回答
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 是一种付费产品,但如果您好奇,请查看免费的开发者试用版。

于 2012-10-21T20:21:31.183 回答
-1

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

于 2010-02-08T05:07:44.213 回答
-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 无意冒犯,他似乎也有答案。)

于 2010-02-09T17:51:27.517 回答