SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
-
neoksi
- Сообщения: 712
- Зарегистрирован: 26 июл 2012, 10:42
-
Контактная информация:
Сообщение
neoksi » 12 ноя 2012, 19:14
Пытаюсь оптимизировать выборку из таблицы используя индексы, но что-то разобраться не могу как это сделать в SQLite под Андроид, есть у кого ссылки на подробные статьи по этому поводу?
У меня вылетает фатальная ошибка, после того как в sql запрос, после имени таблицы добавляю:
Может я что-то не так делаю?
-
damager82
- Администратор
- Сообщения: 1383
- Зарегистрирован: 07 янв 2012, 11:32
-
Контактная информация:
Сообщение
damager82 » 14 ноя 2012, 12:01
neoksi писал(а):Пытаюсь оптимизировать выборку из таблицы используя индексы, но что-то разобраться не могу как это сделать в SQLite под Андроид, есть у кого ссылки на подробные статьи по этому поводу?
У меня вылетает фатальная ошибка, после того как в sql запрос, после имени таблицы добавляю:
Может я что-то не так делаю?
Смотрите доки на их сайте, там все достаточно подробно, хоть и на английском
http://www.sqlite.org/lang_indexedby.html
-
neoksi
- Сообщения: 712
- Зарегистрирован: 26 июл 2012, 10:42
-
Контактная информация:
Сообщение
neoksi » 14 ноя 2012, 13:08
Тобишь после имени таблицы мне необходимо вместо
WITH использовать
INDEXED BY, попробую и отпишусь, а то 700мс на выполнение 168 запросов многовато

-
neoksi
- Сообщения: 712
- Зарегистрирован: 26 июл 2012, 10:42
-
Контактная информация:
Сообщение
neoksi » 14 ноя 2012, 14:50
Раза с 3го получилось реализовать, пришлось провайдер и хелпер подправить. Но к сожалению, нужного эффекта не дало, все равно теряю на каждой 4-5 операцией с БД 10-30мс.
На сколько смог отследить, теряю время на операции:
Код: Выделить всё
SQLiteDatabase db = dbh.getReadableDatabase();
В контент провайдере. Пока не понял, как тут оптимизироваться...
-
damager82
- Администратор
- Сообщения: 1383
- Зарегистрирован: 07 янв 2012, 11:32
-
Контактная информация:
Сообщение
damager82 » 16 ноя 2012, 10:19
neoksi писал(а):Раза с 3го получилось реализовать, пришлось провайдер и хелпер подправить. Но к сожалению, нужного эффекта не дало, все равно теряю на каждой 4-5 операцией с БД 10-30мс.
На сколько смог отследить, теряю время на операции:
Код: Выделить всё
SQLiteDatabase db = dbh.getReadableDatabase();
В контент провайдере. Пока не понял, как тут оптимизироваться...
Транзакции используете? Они значительно ускоряют пакетные операции
-
rezak90
- Сообщения: 3422
- Зарегистрирован: 26 июн 2012, 13:22
- Откуда: UA
-
Контактная информация:
Сообщение
rezak90 » 16 ноя 2012, 14:53
попробуйте ormLite, она быстрее работает.
R.id.team
Политика на форуме запрещена
-
neoksi
- Сообщения: 712
- Зарегистрирован: 26 июл 2012, 10:42
-
Контактная информация:
Сообщение
neoksi » 16 ноя 2012, 17:59
damager82
Транзакции это мощная штука, но только в том случае, когда ты можешь передать множество запросов одновременно. У меня же работа с БД идет через ContentProvider, там в query можно передать только один запрос за раз, а в этом уже query происходит торможение на строке:
Код: Выделить всё
SQLiteDatabase db = dbh.getReadableDatabase();
Я пока не совсем понимаю можно ли в ContentProvider внедрить собственные методы, помимо стандартных, чтоб потом иметь к ним доступ. Чтоб получить доступ к провайдеру данных мы используем следующую конструкцию:
Код: Выделить всё
ContentResolver nimb = context.getContentResolver();
ContentResolver в свою очередь имеет интерфейсную поддержку только стандартных методов ContentProvider.
-
neoksi
- Сообщения: 712
- Зарегистрирован: 26 июл 2012, 10:42
-
Контактная информация:
Сообщение
neoksi » 16 ноя 2012, 18:03
rezak90 писал(а):попробуйте ormLite, она быстрее работает.
Как надстройка над sqlite может быстрее работать самой sqlite?
-
rezak90
- Сообщения: 3422
- Зарегистрирован: 26 июн 2012, 13:22
- Откуда: UA
-
Контактная информация:
Сообщение
rezak90 » 16 ноя 2012, 18:08
вы не поверите но может, почитайте про неё
R.id.team
Политика на форуме запрещена
-
neoksi
- Сообщения: 712
- Зарегистрирован: 26 июл 2012, 10:42
-
Контактная информация:
Сообщение
neoksi » 16 ноя 2012, 18:27
rezak90
спорить не буду, но у меня есть свои убеждения. И переписывать действующее приложение на объектную модель бд... не.
У меня проблема не с самой скоростью sqlite, тут все просто прекрасно оказалось. Проблема с падением производительности при открытии БД. Если переформулировать мой изначальный вопрос, то теперь он звучит так:
"Как передать в ContentProvider более одного запроса за раз и вернуть массив ответов?"
Метод bulkInsert не предлагать, уже задействован под другие нужды.