背景:
我正在研究一个 SQLite 切片缓存数据库(类似于MBTiles
规范),现在仅由一个Tiles
包含以下列的表组成:
X [INTEGER]
- 水平瓦片索引(不是地图坐标)
Y [INTEGER]
- 垂直瓦片索引(不是地图坐标)
Z [INTEGER]
- 瓦片的缩放级别
Data [BLOB]
- 带有瓦片图像数据的流(当前为 PNG 图像)
平铺计算的所有坐标都在应用程序中完成,因此SQLite R*Tree Module
对应的TADSQLiteRTree
类对我来说没有意义。我所需要的只是尽可能快地加载Data
由给定值找到的记录的字段 blob 流。X, Y, Z
除此数据库外,应用程序还将具有由此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,或者它是否以某种方式流式传输?)
- 有些不同 ?