我有一个特殊的用例,用于需要非常快速查找时间的多个内存键值映射。它们每天只设置一次,因此可以被认为是不可变的,用于所有实际目的。 Redis不是一个选项,因为在多个线程访问它时它会受到CPU限制。由于数据复制,多实例redis占用了太多内存。这里要考虑的重要事项是突发读取率非常高。同时约有40-50名工人突然发出大约1000万个请求。
我正在考虑创建一个简单的客户端服务器架构,其中多个读取器连接到服务器以从共享内存映射中读取。但是,我想知道这样的架构是否已经存在并且已经针对这个用例进行了大量测试,在这种情况下我不应该重新发明轮子。
总结一下我最好的选择是什么? TIA。
答案 0 :(得分:0)
可能不适合您,但您可以尝试RBLDNSD并将您的值存储在DNS中。它具有高性能,结果将被缓存,并且很容易从几乎任何编程环境中读取值。要为其写入值,您需要直接写入其区域文件,但格式简单易写。
答案 1 :(得分:0)
您没有提及地图的大小,但鉴于性能如此重要,听起来您可能需要考虑在内存键值映射中保留多个副本的副本。和每个工人一起。
然后,您可以实现一种简单的机制来通知每个工作人员刷新他们的地图的时间(例如Redis PUBLISH或任何其他pubsub类型框架)。
答案 2 :(得分:0)
冒着与stackoverlow自我推销警察发生冲突的风险:-) eXtremeDB可能是一个考虑因素。它不是架构,但您的架构可以简单地定义键值对。它支持MVCC(乐观,非阻塞)并发,因此即使相对不频繁的写入也不会妨碍读者,并且您将能够利用所有CPU核心。