我正在尝试构建一个可以存储几个 (<=100) 个计数映射的服务,其中每个计数映射可以存储约 10 亿个唯一键,并且计数永远不会超过 MAX_INT。我将在每个计数图上运行的操作是:
- 许多增量操作(每个键平均 10 次增量)- 增量操作可以从一堆(~10) 不同的节点。
- 最后一个操作获取所有键/值 在所有增量之后给定 HashMap 的(最好是流式传输) 完成。在这一点上,我们基本上会删除计数图 阅读所有 key 后。我们也保证他们会 一旦我们开始读取键/值计数就不要写入
最本质的要求是每个增量操作都应该具有超低的延迟。耐用性不是问题,但正确性才是最重要的。
我研究了 Redis 和 Hazelcast。从具有使用适合此用例的技术经验的人那里征求意见。
最佳答案
您可以使用 Redis Hash对于每个计数图,并使用 HINCRBY做增量,和HSCAN或 HGETALL获取键/值。
您需要实现一种机制来保证“一旦开始读取就不再写入”,请查看 Redis Pub/Sub机制为例。
关于algorithm - 低延迟分布在内存 HashMap (计数映射)中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33183293/