我在金融业工作。我们想推出数据库命中数据处理。这是非常昂贵的。所以我们计划采用按需缓存逻辑。 [运行时插入&运行时查找]
是否有人在超过1000万条记录中实施缓存逻辑?每条记录大约是160 - 200字节。
我用不同的方法面对以下缺点。
如果您遇到过这个问题并以任何方式解决了,请建议我。
由于
答案 0 :(得分:1)
如果您的缓存是一个简单的键值存储,则不应该使用std::map
,它具有 O (log n )查找,但{ {1}},其中 O (1)查找。如果您需要排序,则应该只使用std::unordered_map
。
听起来好像是你所追求的,所以你可能想看看Boost Intrusive。您可以轻松地将std::map
和unordered_map
组合在一起以创建高效LRU。
答案 1 :(得分:0)
将所有内容读入内存并创建R& B树以进行密钥访问。
http://www.mit.edu/~emin/source_code/cpp_trees/index.html
在最近的一个项目中,我们拥有大约10个M记录的数据库,并且正在使用这样的策略。
您的数据重量为2GB,来自您的帖子。随着开销,它会说达到两倍。任何64位架构都没问题。
答案 2 :(得分:0)
我最近更改了产品(3D医疗卷查看器)的内存分配,以使用良好的旧内存映射文件。
优点是:
在我的情况下,它只是数据(主要是只读)。如果您有一个更复杂的数据结构,这将比使用“普通”对象更多的工作。
您实际上可以跨进程共享这些进程(如果它们由真实文件支持)。这可能有不同的表现,我对此没有经验。