在构建ADO记录集时将数据拉入内存
Is data pulled into memory when building an ADO Recordset?
我一直在做一个相当大的c++项目,令人惊讶的是,它使用MS Access 97作为底层数据库引擎。我注意到代码中有很多实例,其中记录集是从可能返回超过100,000条记录的查询中创建的。
我很好奇ADO是否会在构建记录集时将所有数据拉入内存,或者如果它更智能,并且只能在尝试从记录集读取数据时加载数据"及时"?我们收到了很多客户对性能的投诉,我觉得这很可疑。
迁移到更新的数据库引擎在我们的路线图上。相信我,团队中没有人对Access感到满意。在这里使用Access数据库有几个问题:
- 假设它支持255个并发用户,实际上在6个20是最大数目,数据库连接较少规模/复杂性增加。
- 数据库大小的2Gb限制和
- 是的,数据在本地缓存,所以如果你有5000个结果你只能接受他们:)
我很好奇ADO是否会在构建记录集时将所有这些数据拉入内存,或者如果它更智能,并且只能在尝试从记录集读取数据时"及时"加载数据?
也许异步获取行可以改善用户体验。请参阅ExecuteOptionEnum中的选项,这些选项可以与ADO记录集打开方法一起使用。我怀疑这是不是你心目中的"及时",但这是我能提供的最好的了。
在我看来,更好的设计是修改查询,只检索100K行的一个子集。那么"及时"就可以变成"让用户请求下一个子集"。并且您应该能够通过合理大小的记录集从Access获得体面的性能。
相关文章:
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 如何在 malloc 内存中初始化非 POD 数据
- 如何使用 MPI 的远程内存访问 (RMA) 功能并行化数据聚合?
- 为什么字符串的 move() 会改变内存中底层数据的位置?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 存储在哪个内存段(代码/数据段)类(员工)中?
- 基于浅树的数据结构的内存分配器,用于频繁分配和解除分配
- 获取 R 数据帧的内存地址
- 将数据存储在内存中以供以后访问
- 整数数据如何以位为单位存储在内存中?不是右对齐吗?
- 数据在内存 c++ 中丢失
- 我可以使用哪种数据结构来释放连续内存中的内存?
- 使用 delete [] 运算符取消分配类中数据成员的内存
- 为什么 std::set 容器使用的内存比其数据大小多得多?
- 如果一个变量在它之前释放了另一个(相同的数据类型)变量,如何将其分配给内存?
- 内存映射C++中的流数据
- 如何返回定义良好的内存部分?例如来自图像数据的像素的颜色值
- C++应用程序中的静态数据内存限制
- 基于两个程序之间的事件触发器访问数据(内存)
- C++并集表示数据内存与C标量变量类型