【问题标题】:MBTiles performanceMBTiles 性能
【发布时间】: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


【解决方案1】:

找到了!表索引从未得到应用。通过 execSql 发送的 CREATE SQL 包含由分号分隔的两条语句;一个创建表,另一个创建关联索引。显然,实际上只有第一个 (CREATE TABLE) 语句被执行,所以第二个 (CREATE INDEX) 语句从未被执行。我能够通过在 adb shell 中使用 sqlite3 util 找到这一点。运行 .indices map 没有返回任何内容。在更改 CREATE 脚本以实际创建索引之后,瞧! Super-Duper 快速查询!

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-04
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多