首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在进程内存中缓存大量数据

在进程内存中缓存大量数据
EN

Stack Overflow用户
提问于 2011-07-12 17:59:21
回答 3查看 2.1K关注 0票数 3

我在金融业工作。我们想推出数据库命中的数据处理。它非常昂贵。因此,我们计划采用按需缓存逻辑。运行时插入&运行时查找

是否有人致力于实现超过1000万条记录的缓存逻辑?每个记录大约是160-200字节。

我用不同的方法面对以下缺点。

  1. 无法使用stl std::map实现密钥基缓存注册表。在200000条记录之后,插入和查找非常缓慢。
  2. 共享内存或内存映射的文件是缓存数据的一种开销,因为这些数据不是跨进程共享的。
  3. 使用sqlite3内存和平面文件应用程序数据库是值得的.但在230万条记录之后,它的查找速度也很慢。
  4. 进程内存本身的内核内存消耗可能有一些限制。我的假设是在32位机上2G,64位机上4G。

如果你遇到这个问题,并以任何方式解决了,请给我一些建议。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-12 19:13:58

如果您的缓存是一个简单的键值存储,则不应该使用std::map,它具有O(log )查找,而使用std::unordered_map,它具有O(1)查找。只有在需要排序时才应该使用std::map

听起来,性能是您所追求的,所以您可能想看看Boost侵入。您可以轻松地将unordered_maplist结合起来创建一个高效率的LRU。

票数 2
EN

Stack Overflow用户

发布于 2011-07-12 18:13:05

将所有内容读入内存并创建R&B树以进行密钥访问。

树/index.html

在最近的一个项目中,我们有大约10s记录的数据库,并且正在使用这样的策略。

您的数据权重是2GB,从您的帖子。在头顶上,它会说出双倍。对于任何64位的体系结构来说,这都不是问题。

票数 1
EN

Stack Overflow用户

发布于 2011-07-12 18:15:14

我最近改变了我们产品的内存分配(3D医学卷查看器),以使用良好的旧内存映射文件。

其优点是:

  • 如果我愿意的话,我可以分配所有的物理内存(我的32位应用程序有时在64位机器上需要超过4G)
  • 如果您只映射部分,您的入口空间基本上是免费的,您的应用程序使用,这提高了可靠性。
  • 如果你内存不足,事情就会慢下来,不会崩溃。

在我的例子中,它只是数据(大部分是只读的)。如果您有一个更复杂的数据结构,这将是更多的工作比使用“正常”对象。

您实际上可以跨进程共享这些文件(如果它们是由一个真正的文件支持的)。这可能会有不同的表现,我对此没有经验。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6668824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档