我正在研究存储可能是大量数据的策略,我想找到最好的存储技术。我愿意接受任何关于 MySQL、NoSQL、平面文件、任何东西的建议。
我在做什么:
- 我将在一组用户中分配所有 4 字节整数。
- 数字将是 0 到 4,294,967,295,无符号 4 字节整数范围。
- 用户可以拥有数千个这样的号码。
- 期待成千上万的用户,但数百万的可能性很小。
- 数字将在一段时间内分发,而不是一次全部分发
- 使用 AWS、一些服务器和 EBS 卷
我主要关心的是存储空间。我需要在 AWS 上以便宜且大批量的成本来做这件事。
我对数学上的数字分配进行了一些研究,但我发现了太多问题。
要求
- 用于分析和实时数据显示的某些有效检索。不一定要闪电般快速但合理。
- 我需要在两个方向上查找用户 ID -> 号码和号码 -> 用户 ID
- 尽可能少的存储空间。
- 合理的(小于 8 GB)内存使用。
- 必须准确,丢失号码和错误分配的号码不是一种选择。
这是我到目前为止发现的:
存储与 2 字节用户 ID 关联的所有 4 字节数字的下限是 ((4+2) * 2^32 / 1024 / 1024 / 1024) = 24 GB。
Cassandra 是一个键/值对数据库。基于这个http://www.datastax.com/docs/0.8/cluster_architecture/cluster_planning我计算出,如果我使用每个 4 字节数字作为键和 2 字节用户 ID 作为值,我需要大约 260GB 的存储空间(没有复制)。
Redis 在内存中。我认为这将消除这种可能性,因为在 AWS 上这么多内存会非常昂贵。
我目前正在寻找有关 MySQL 和 Mongo 的类似信息。
这是我的问题。有没有我可以用来确定最佳解决方案的参考资料,或者有没有我没有想到的替代解决方案。
谢谢大家。
更新 - 我添加了一个额外的要求,我需要根据用户 id 和用户 id 来查找数字。此外,Redis 是在内存中的,因此直接实现会使 Redis 比基于磁盘的解决方案更昂贵。