【发布时间】:2023-03-13 12:15:02
【问题描述】:
我正在开发一个 Android 地图应用程序。
我正在使用 MBTiles 存储我的图块以供离线查看。一切都很好,但随着数据库大小的增加,性能会大大降低。切片的大小各不相同,但通常大小约为 6 kb,并以 blob 形式存储。我已经用索引和所有复制了 Mapbox 和其他人使用的架构。该数据库目前大小约为 40 mb,读取大约需要 5 秒。到目前为止,我已经做了很多研究,除了它应该可以工作之外什么也没发现。请参阅this SQLite page。
我做错了什么?这是 Android 限制吗?
【问题讨论】:
-
什么读取需要 5 秒?一块瓷砖?所有的瓷砖?你有什么索引?
-
从数据库中检索一个图块需要 5 秒。是的,已添加索引。
-
什么是慢查询?
-
CL - MBTiles 有两个主表;地图和图像。地图表包含每个瓦片 (z,x,y) 的记录,并通过瓦片视图中的连接连接到其图像。这种分离的原因是为了节省空间,因为一些瓷砖是相同的。在图像插入之前,我们使用 UUID.nameUUIDFromBytes(tileBytes) 生成图像 id。如果 id 已经存在于图像表中,我们只需链接到它,如果它不存在,则插入新的图像记录。较慢的查询是检索单个图块(SELECT tile_data from tiles WHERE zoom_level = ? AND tile_column = ? AND tile_row = ?)。
标签: android performance sqlite mapbox