iPhone и SQLite: как обрабатывать соединение с базой данных с несколькими классами?

У меня есть некоторые сомнения по поводу SQLite... Мое приложение использует только одну таблицу (инкапсулированную в классе логики данных) для хранения небольших данных, соединение открывается в didFinishLaunchingWithOptions и финализируется в applicationWillTerminate (да, я знаю, что в iOS4 applicationWillTerminate называется только по iSO при необходимости, но я пишу в базу данных при каждом изменении данных).

Теперь мне нужно добавить вторую таблицу (и относительный класс), которая будет хранить разные данные (без объединения двух таблиц) и нормального размера (около 1-2 строк в день).

Я думал о применении шаблона singleton для совместного использования соединения и операторов, но я прочитал, что по соображениям производительности рекомендуется использовать локальные переменные класса для удержания соединения.

Итак, какова лучшая практика? Синглтон или два открытых соединения? Какое решение вы бы порекомендовали для моей ситуации?

Спасибо


person user370773    schedule 07.08.2010    source источник
comment
Для такой простой базы данных написание кода SQLite вручную — пустая трата времени. Используйте Core Data. Гораздо проще, скорее всего, намного быстрее, и намного проще в обслуживании и развитии.   -  person bbum    schedule 07.08.2010
comment
Пожалуйста, добавьте в качестве ответа.   -  person Toby Allen    schedule 08.08.2010


Ответы (2)


Для такого простого использования синглтон, вероятно, является правильным ответом по тем самым причинам, которые упоминает @Eiko.

Однако все это вызывает вопрос: почему вы не используете Core Data?

Правильно использовать SQLite на самом деле довольно сложно, и я видел десятки очень талантливых/опытных инженеров, которые ошибались, даже не осознавая этого. Хуже того, масштабировать существующую реализацию еще сложнее. Добавить параллелизм действительно очень сложно с помощью простого SQLite (и инженеры Core Data потратили огромное количество энергии и применили массу опыта для правильной поддержки параллелизма поверх SQLite).

Для такого простого использования Core Data не составит труда освоить, и это оставит вас с гораздо более надежной и универсальной кодовой базой.

person bbum    schedule 07.08.2010

Singleton для меня при хранении в той же базе данных.

Небольшие объемы данных не должны стать узким местом в производительности в ближайшее время.

Или, конечно, используйте CoreData. :-)

person Eiko    schedule 07.08.2010