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



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

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

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

注意 - 我看到有一个名为MapReduce的方法。但是我不明白如何将其应用于我的方案。

我建议如下:

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

可能的操作(取决于瓶颈所在(

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

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

相关内容

最新更新