【问题标题】:Using Pickle vs database for loading large amount of data?使用 Pickle vs 数据库加载大量数据?
【发布时间】:2014-09-27 04:17:18
【问题描述】:

我之前保存了一个映射 image_name -> 特征向量列表的字典,文件约为 32 Gb。我一直在使用 cPickle 来加载字典,但由于我只有 8 GB 的 RAM,这个过程需要很长时间。有人建议使用数据库来存储所有信息并从中读取,但这会比从磁盘读取文件更快/更好的解决方案吗?为什么?

【问题讨论】:

  • 真的 REALLY 取决于数据的类型和数量。如果计算上可行,您可能还需要考虑仅存储主要组件并即时重新计算其余部分
  • 我正在存储筛选描述符,这需要很长时间才能构建,所以我真的不能每次都计算它们。它们是 1 x 128 个向量 docs.opencv.org/trunk/doc/py_tutorials/py_feature2d/…
  • 您确实需要考虑是否需要同时提供所有这些数据。如果你有很多图像,你可能一次只需要一个,你可能不会对其他图像做任何事情。我很确定从数据库中一张一张地选择几张图片比一次加载 32GB 数据要快得多;)
  • 我确实同时需要它,因为我在整个描述符列表上运行 kmeans 集群,所以我认为没有办法将它们放在主内存中
  • 如果您确实在进行需要 32GB 数据存储在内存中的计算,那么数据库将无济于事。我会重新考虑你的算法或获得更多的内存。另见stackoverflow.com/questions/6372397/…

标签: python database computer-vision pickle


【解决方案1】:

使用数据库,因为它可以让您更快地查询。我以前做过。我建议不要使用 cPickle。您使用的是什么具体实现?

【讨论】:

  • inmemory 字典(=hashmap)通常比 db 快(如果它在内存中而不是在交换中)。如果真的需要 32gb,我会使用 db,不是因为速度,而是因为内存。
  • 使用mongodb,比pickle灵活很多
猜你喜欢
  • 2023-03-12
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
  • 2012-02-11
  • 2013-01-01
相关资源
最近更新 更多