【发布时间】:2010-09-21 22:45:10
【问题描述】:
我想将数据库中的大型结果集存储在内存中。每条记录都有可变长度,访问时间必须与数组一样快。实现这一点的最佳方法是什么?我正在考虑将偏移量保存在单独的表中并连续存储所有记录?奇怪吗? (编程语言:Delphi)
【问题讨论】:
-
了解您正在考虑使用哪种编程语言以及诸如此类的问题会有所帮助。
标签: delphi arrays variable-length
我想将数据库中的大型结果集存储在内存中。每条记录都有可变长度,访问时间必须与数组一样快。实现这一点的最佳方法是什么?我正在考虑将偏移量保存在单独的表中并连续存储所有记录?奇怪吗? (编程语言:Delphi)
【问题讨论】:
标签: delphi arrays variable-length
最好的方法可能是包含一个指向记录的指针数组。在这种情况下,您不必处理偏移量,并且查找将是恒定的时间。
【讨论】:
不确定我是否完全关注你,但请看一下 TList。
至少在 Delphi 7 中,它被实现为一个指针数组。如果您知道有多少结果返回,您可以使用容量属性提前预分配列表。
如果空间不足,列表将自动增长。它增长多少取决于列表有多大。
查看类单元的源代码,看看它在做什么。
编辑:同样在 D2009 中,TList 添加了泛型支持,使其更好用。
【讨论】:
我会使用 TList,并存储指向您的记录的指针。
type
pMyRecord : ^TMyRecord;
...
...
...
var
p : pMyRecord;
...
...
New(p);
with p^ do
begin
...
...
end;
...
MyList.Add(P);
【讨论】:
为什么不使用您的数据库的 MEMORY 版本?大多数都有办法将完整的表保存在内存中,通常涉及 SQL 关键字 MEMORY。您将表从磁盘复制到内存表,然后可以以内存速度使用所有正常的数据库操作。我知道这在 DBISAM 中效果很好。
【讨论】:
在mj2008 之后,您可以使用 TCLientDataset 而不是记录数组。 该结果集有多大?
【讨论】: