【发布时间】:2013-05-10 20:42:15
【问题描述】:
背景:
我正在开发一个 SQLite 切片缓存数据库(类似于 MBTiles 规范),现在仅由一个表 Tiles 和以下列组成:
X [INTEGER] - 水平切片索引(不是地图坐标)Y [INTEGER] - 垂直切片索引(不是地图坐标)Z [INTEGER] - 切片的缩放级别Data [BLOB] - 流带有平铺图像数据(当前为 PNG 图像)
平铺计算的所有坐标都在应用程序中完成,因此 SQLite R*Tree Module 和相应的 TADSQLiteRTree 类对我来说没有意义。我只需要尽快加载由给定X, Y, Z 值找到的记录的Data 字段blob 流。
除了这个数据库,应用程序还有一个内存缓存,由像这样TTileCache类型的哈希表实现:
type
TTileIdent = record
X: Integer;
Y: Integer;
Z: Integer;
end;
TTileData = TMemoryStream;
TTileCache = TDictionary<TTileIdent, TTileData>;
在计算 X, Y, Z 值的同时请求某个图块时的工作流程将很简单。我会在内存缓存中请求一个磁贴(在应用程序启动时从上表中部分填充),如果在那里找不到磁贴,请询问数据库(即使找不到磁贴,下载它来自磁贴服务器)。
问题:
您将使用哪个 AnyDAC (FireDAC) 组件来频繁查询 SQLite 表中的 3 个整数列值(假设有 10 万条记录),并可选择加载找到的 blob 流?
你会用吗:
- 查询类型组件(我想说执行相同的准备好的查询可能很有效,不是吗?)
- 内存表(我担心它的大小,因为磁贴表中可能存储了几 GB,或者它是否以某种方式流式传输?)
- 有什么不同?
【问题讨论】:
标签: sqlite delphi anydac firedac