使用C ++优化查询SQLite DB中超过5000万条数据记录的方式

时间:2018-08-23 18:35:05

标签: c++ sqlite

我有一个数据库,其中包含11GB的数据大小。在我的场景中,我需要查询所有数据(select * from table)并使用每5000万条记录创建对象。这里的内存不是问题,我使用的是8CPU 52GB RAM机器。

当前,我正在这样做,将计算机中的CPU数量作为线程获取,并将数据库分为每个线程的范围。然后,在每个线程中,它查询SQLite数据记录中的数据,并创建一个std::vector<map <string,string>>结构来保存这些数据。然后从向量中获得一个元素,并创建一个我需要的对象。最后,所有线程将对象推入所有线程的全局数组。

但是这种方法并不能给出超过5000万条记录的预期优化结果,任何人都可以建议我该怎么做才能从DB中快速访问数据。

注意-我看到有一个称为MapReduce的方法。但是我不明白如何将其应用到我的场景中。

1 个答案:

答案 0 :(得分:-1)

我建议以下内容:

  1. 确保您使用-O2在发布模式下构建
  2. 在代码上运行分析器(例如http://www.codersnotes.com/sleepy/)以查看瓶颈所在的位置
  3. 比较单线程和多线程解决方案

可能采取的措施(取决于您的瓶颈所在)

  • 阅读时执行/开始转换
  • 尝试单线程排除锁定/共享数据结构的问题
  • 使用缓存友好的数据结构
  • 进行批量操作进行处理 ...

分析后告诉您的发现,您将获得更有针对性的建议