Каковы некоторые лучшие практики, которые следует учитывать при работе с SQLite на iPhone? Подсказки/трюки/факторы удобства все оценили.Лучшие практики SQLite на iPhone
ответ
Я могу порекомендовать использовать FMDB в качестве прекрасной обертки Cocoa SQLite.
Off верхней части моей головы:
- использовать транзакции.
- Убедитесь, что ваш SQL использует таблицы в correct order.
- Не добавляйте индексы, которые вы не совсем уверены в необходимости.
Возможно, не только для iPhone, но и для встроенных устройств есть несколько отличных подсказок here.
Этот link относится к старой версии SQLite, но при этом полезен.
Последнее, что Stack Question также имеет некоторую хорошую информацию.
В настоящее время мы используем SQLite с .Net Compact Framework Application, и его производительность фантастична, и мы потратили немного времени на оптимизацию, но не настолько, насколько могли.
Удачи.
Измерьте площадь памяти вашего приложения и найдите утечки в Инструментах. Затем попробуйте после вызова sqlite3_exec с:
pragma cache_size=1
и/или
pragma synchronous=0
YMMV. Появляются сообщения о повышении производительности, больших сокращениях использования ОЗУ и меньшем количестве утечек. Однако будьте осторожны при настройке без понимания воздействия (например, synchronous
отключает промывку, что ускоряет работу, но может привести к повреждению БД, если телефон отключен в режиме питания в неподходящее время).
Подробнее здесь: http://www.sqlite.org/pragma.html
+1 для этого cache_size может съесть довольно много памяти на iphone и Мне потребовалось некоторое время, прежде чем я нашел это. – paulthenerd
Я нашел, что это часто быстрее просто получить идентификаторы я ищу в сложном запросе, а затем получить остальную информацию по требованию.
Так, например:
SELECT person_id
FROM persons
WHERE (complex where clause)
, а затем, как это отображается каждый человек, которого я побегу
SELECT first_name, last_name, birth_date, ...
FROM persons
WHERE person_id = @person_id
Я обычно нахожу это делает сложный запуск запроса в 1/2 времени и поиск для данного человека обычно составляет порядка 2 мс (это на таблицах с 17 тыс. строк).
Ваш опыт может отличаться, и вы должны самим заняться временем.
Кроме того, я должен отдать должное Вил Шипли за то, что предложил эту технику в его выступлении здесь: http://www.vimeo.com/4421498.
На самом деле я действительно использую шаблон гидратации/дегидратации из sqlitebooks, который является надмножеством этой техники.
Я ленивая и люблю придерживаться в основной код как можно больше, поэтому мне нравится ORM инструмент SQLitePersistentObjects:
http://code.google.com/p/sqlitepersistentobjects/
Вы делаете вашу модель домена объекты наследуют от SQLitePersistentObject (ок немного intrusive), а затем вы можете сохранять/извлекать свои объекты по мере необходимости.
Чтобы сохранить:
[person save];
Загрузка его обратно в почти так же легко. Любой устойчивый объект получает динамические методы класса, добавленные к нему, чтобы вы могли искать. Таким образом, мы могли бы получить все объекты Person, которые имели фамилию «Смит», как так:
NSArray *people = [PersistablePerson findByLastName:@"Smith"];
Еще один вариант я еще не пробовал это Core Data (нужно быть iphone DEV компании Apple), хотя его функция 3,0 и так это зависит от вашего приложения ли тот вариант ..
Все текущие приложения должны быть построены с помощью SDK 3.0, поэтому я бы сказал, что Core Data - лучший вариант. –
Как я понимаю, представление не обязательно должно быть построено с 3.0, оно просто будет протестировано против него: «все заявки в App Store будут рассмотрены на последней бета-версии iPhone OS 3.0. Если ваше приложение не является совместимый с iPhone OS 3.0, он не будет одобрен ». –
PLDatabase является альтернативой FMDB: http://code.google.com/p/pldatabase/
Я использовал его в одном из моих проектов, без проблем.
- 1. Лучшие практики с Sqlite Android
- 2. Лучшие практики на BackgroundWorker
- 3. Лучшие практики для SQLite DB и ContentProvider
- 4. Лучшие практики CoreData
- 5. Лучшие практики для синглтонов и уведомлений на iPhone
- 6. php лучшие практики
- 7. Написание псевдокода - лучшие практики?
- 8. Symfony 2: Лучшие практики
- 9. Кэширование - лучшие практики
- 10. AngularJS: Лучшие практики
- 11. Лучшие практики javascript/jquery
- 12. ctags лучшие практики
- 13. IBOutlet лучшие практики
- 14. Сельдерей + Джанго лучшие практики
- 15. Хруст изображения, лучшие практики?
- 16. Структура решения/лучшие практики
- 17. CFReadStreamHasBytesAvailable опрос - лучшие практики
- 18. CSS Outline лучшие практики
- 19. OpenGL ВАО лучшие практики
- 20. Лучшие практики CodeIgniter Templating
- 21. Лучшие практики при прототипировании?
- 22. Ember 2 лучшие практики
- 23. Лучшие практики TFS 2015
- 24. Материализованные виды - лучшие практики
- 25. CLLocationManager лучшие практики
- 26. Объявление переменных - лучшие практики
- 27. TryParse - лучшие практики
- 28. Лучшие практики JQuery
- 29. Перегрузка лучшие практики
- 30. Вложенные запросы: лучшие практики
Вы уверены, что это утечка памяти, безопасная в использовании и т. Д.? Это, конечно, не является полным и, по-видимому, неподдерживаемым. Я говорю, идите с CoreData и настройте производительность, когда (если) он становится плохим. – melfar
Когда я просматриваю свои приложения для утечек, я никогда не нашел их в библиотеке. – pgb
Это может быть лучшая ссылка http://code.google.com/p/flycode/source/browse/#svn/trunk/fmdb –