nosql - 存储大量二进制文件应该用redis吗?

标签 nosql redis blob

<分区>

我需要存储大量二进制文件(10 - 20 TB,每个文件从 512 kb 到 100 MB 不等)。

我需要知道 Redis 是否对我的系统有效。 我的系统中需要以下属性:

  • 高可用性
  • 故障转移
  • 分片

我打算使用一组商用硬件来尽可能降低成本。请建议使用 Redis 构建此类系统的优缺点。我也担心 Redis 的高 ram 要求。

最佳答案

我不会使用 Redis 来完成这样的任务。其他产品将更适合 IMO。

Redis 是一种内存数据存储。如果要存储 10-20 TB 的数据,则需要 10-20 TB 的 RAM,这很昂贵。此外,内存分配器针对小对象而非大对象进行了优化。您可能不得不将文件切成各种小块,这不是很方便。

Redis 不提供 HA 和故障转移的临时解决方案。提供了主/从复制(并且工作得很好),但不支持此故障转移的自动化。客户端必须足够聪明才能切换到正确的服务器。服务器端的某些东西(但未指定)必须以可靠的方式在主节点和从节点之间切换角色。换句话说,Redis 仅提供自己动手的 HA/故障转移解决方案。

分片必须在客户端实现(就像使用 memcached)。一些客户支持它,但不是全部。最快的客户端(hiredis)没有。无论如何,像重新平衡这样的事情必须在 Redis 之上实现。应该支持这种分片功能的 Redis Cluster 还没有准备好。

我建议使用其他一些解决方案。带有 GridFS 的 MongoDB可能是一种可能性。 Hadoop 与 HDFS是另一个。如果你喜欢尖端项目,你可能想要给 Elliptics Network一试。

关于nosql - 存储大量二进制文件应该用redis吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8786395/

相关文章:

python - arangoDB 的 pyarango 驱动程序 : validation

ruby-on-rails - 在 Rails 3 中将 session 从 cookie_store 迁移到 Redis

react-native - 在 react-native 上将 base64 转换为 blob 时获取错误

http - azure Blob : "The condition specified using HTTP conditional header(s) is not met"

redis - 为什么我的 redis 命令键不会阻止我的其他操作

java - 从 BLOB 文件恢复数据 S-Health

mongodb - 批量读取 Mongo DB 的最佳方式 - 有这样的东西吗?

c++ - 错误 LNK2019 : unresolved external symbo UnQLite

database - 如何查询couchbase上的具体数据?

redis - 我试图在 Redis 的 Spring 中实现 multiGet 操作,它抛出一个错误