2013-04-25 3 views
1

Я работаю над приложением для Android-приложений.
Я использую MBTiles для хранения своих плит для просмотра в автономном режиме. Все работает отлично, но производительность значительно ухудшается по мере роста размера db. Плитки различаются по размеру, но обычно имеют размер около 6 килобайт и хранятся как капли. Я реплицировал схему, используемую Mapbox, и другие с индексами и всеми. В настоящее время база данных имеет размер около 40 мб, и чтение занимает около 5 секунд. До сих пор я провел немало исследований и ничего не нашел, кроме того, что он должен работать. См. this SQLite page.
Что я делаю неправильно? Это ограничение Android?MBTiles performance

+0

* Что * считывает 5 секунд? Одна плитка? Все плитки? Какие индексы у вас есть? –

+0

Получение одной плитки из базы данных занимает 5 секунд. Да, добавлены индексы. – whyvez

+0

Реплицированные сценарии создания здесь: https://github.com/mapbox/mbutil/blob/master/mbutil/util.py – whyvez

ответ

2

Найденный! Табличные индексы никогда не применялись. CREATE SQL, отправленный через execSql, содержал два утверждения, разделенных точкой с запятой; один для создания таблицы и другой для создания связанного индекса. Очевидно, что только первый (CREATE TABLE) оператор фактически был выполнен, поэтому второй (CREATE INDEX) оператор никогда не выполнялся. Я смог найти это, используя утилиту sqlite3 в оболочке adb. Запуск карты .indices ничего не возвращал. После изменения скриптов CREATE для создания индексов VOILA! Супер-Дюпер быстрые запросы!

+1

Ребята в Mapbox, где достаточно, чтобы поделиться своей схемой MBTiles. https://github.com/mapbox/node-mbtiles/blob/master/lib/schema.sql – whyvez

Смежные вопросы