Какао SQLite, когда закрывать базу данных? - PullRequest
2 голосов
/ 19 мая 2011

Я пишу свое первое приложение для MacOS, использующее SQLite (https://github.com/ccgus/fmdb).

. Я мог либо открывать / закрывать соединение с базой данных для каждой транзакции (CRUD), либо в init / dealloc. Каков наилучший способ?

Ответы [ 2 ]

0 голосов
/ 20 августа 2011

Я не уверен, что у меня есть окончательный ответ, но сам немного разбираясь в этом, я видел множество людей, которые говорят, что можно оставить базу данных открытой.

Кроме того, если вы посмотритена сайте Sqlite вы увидите, что они проделали большую работу, чтобы гарантировать, что база данных не будет повреждена в результате сбоев, сбоев питания и т. д.

http://www.sqlite.org/testing.html

http://www.sqlite.org/atomiccommit.html

Мой опыт использования Sqlite и FMDB таков, что было бы неплохо открыть соединение и просто оставить его открытым.Помните, что это «соединение» с файлом, который находится в локальной файловой системе во флэш-памяти.Это совсем другая ситуация, чем соединение по сети.Я думаю, что вероятность сбоя чрезвычайно мала, поскольку он явно предназначен для обработки сбоев, сбоев питания и т. Д., Даже если они происходят во время реальной операции базы данных - поэтому вне операции базы данных они не являются проблемой.

Можно, конечно, утверждать, что держать соединение с базой данных, когда оно не используется, - это плохая практика, и я бы не советовал это делать в типичной конфигурации клиент-сервер, но на iPhone / iPad я думаю, что это не проблема.Держать его открытым, кажется, работает нормально, и это не та вещь, о которой стоит беспокоиться.

0 голосов
/ 21 мая 2011

Вы не хотите, чтобы ваше приложение оставляло базу данных открытой от начала до конца, если только все, что она делает, это запускается, выполняет работу с БД, а затем завершает работу. Причина этого заключается в том, что в редких случаях приложение может быть остановлено из-за системной проблемы, потери питания и т. Д .; поскольку SqLite основан на файлах, это может привести к открытию файла или к некоторым другим несинхронизированным условиям. Открывайте базу данных, когда она вам нужна, делайте свое дело и закрывайте ее, когда она больше не нужна. Вы не можете защитить от сбоев, пока вы на самом деле выполняете операции с БД, но вы следите за тем, чтобы БД была стабильной и закрытой, когда выполнялся ваш последний набор операций с БД. Кроме того, SqLite открывается и закрывается очень быстро. Хорошо, позвольте мне изменить это: SqLite3, который я скомпилировал в свое приложение, делает. На самом деле я не знаю о других версиях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...