数据结构内存映射还是数据库? (百万件物品)

时间:2011-08-08 23:51:35

标签: c# .net dictionary memory-mapped-files

我有一个数据结构,它本质上是一些计算的查找,需要花费很长时间(100毫秒)来计算并且需要反复使用。我有大约6,000,000个这些计算,并希望在我的应用程序启动时将它们加载到内存中(我会预先计算它们)。

问题是我可以将其存储为内存映射文件(某事物的字典),还是应该将其存储在数据库中,然后在程序启动时将其加载到ram中?二进制序列化的速度有多快?

我有什么选择?

2 个答案:

答案 0 :(得分:3)

二进制序列化很快,特别是如果你只需加载一次。数据库的加载速度实际上取决于数据的结构。使用数据库的优点是易于管理。如果您想轻松管理,更改,跟踪更改或将这些值与多个客户端一起使用,那么数据库就是您的选择。如果它们永远不会改变,那么文件就足够了。

答案 1 :(得分:2)

你必须尝试不同的方法并自己衡量。没有其他途径可以解决性能问题。请注意,您需要考虑一些concreate目标(例如1秒加载/ 1ms查找)。

选项:

  • 计算启动时的所有值和某些查找中的sotre(预分配数组/字典)
  • 在某些查找中按需计算和sotre(预分配数组/字典)
  • 预先计算并加载未压缩的(请注意,您拥有的数据量很大,需要花费1-3秒的时间才能加载)
  • 提前计算并按需加载
  • 预先计算并加载压缩数据

我建议尝试计算负载上的所有值,看看它是否足够快 - 最有可能最简单的方法。