>我有一个数据库,数据大小为11GB。在我的场景中,我需要查询所有数据(select * from table
(,并使用每 5000 万条记录创建对象。这里的内存不是问题,我使用的是 8CPU 52GB RAM 机器。
目前,我正在做这项工作,获取机器中的 CPU 数量作为线程,并将数据库划分为每个线程的范围。然后在每个线程中,它查询 SQLite 数据记录中的数据,并创建一个std::vector<map <string,string>>
结构来保存这些数据。然后从向量中获取一个一个元素并创建一个我需要的对象。最后,所有线程将对象推送到所有线程的全局数组中。
但是这种方法,不能给出超过 5000 万条记录的预期优化结果,任何人都可以建议我该怎么做才能从数据库快速访问数据。
注意 - 我看到有一个名为MapReduce的方法。但是我不明白如何将其应用于我的方案。
我建议如下:
- 确保使用 -O2 在发布模式下构建
- 对代码运行分析器(例如 http://www.codersnotes.com/sleepy/(,以查看瓶颈在哪里
- 比较单线程和多线程解决方案
可能的操作(取决于瓶颈所在(
- 阅读时执行/开始转换
- 尝试单线程以排除锁定/共享数据结构的问题
- 使用缓存友好的数据结构
- 进行批量操作以进行处理 ...
在分析后告诉您的发现,您将获得更有针对性的建议