Sqlite в качестве замены для fopen ()? - PullRequest
10 голосов
/ 29 марта 2009

На официальной веб-странице sqlite3 написано, что я должен думать о sqlite как о замене функции fopen ().

Что вы думаете об этом? Всегда ли это хорошее решение для пополнения внутреннего хранилища данных приложения с помощью sqlite? Какие плюсы и минусы у такого решения?

У вас есть опыт?

EDIT: Как насчет вашего опыта? Легко ли пользоваться? Было ли это больно или скорее радостно? Тебе нравится?

Ответы [ 4 ]

10 голосов
/ 29 марта 2009

Это зависит. Есть некоторые противопоказания:

  • для файлов конфигурации, использование простого текста или XML намного легче отладить или изменить, чем использование реляционной базы данных, даже такой простой, как SQLite.

  • древовидные структуры проще описать с помощью (например) XML, чем с помощью реляционных таблиц

  • API SQLite довольно плохо документирован - примеров недостаточно, а гиперссылка плохая. ОТО, информация - это все, что нужно, если вы хотите ее найти.

  • прямое использование специфичных для приложения двоичных форматов будет быстрее, чем сохранение в базе данных того же формата, что и большого двоичного объекта

  • повреждение базы данных может означать потерю всех ваших данных, а не потерю в одном плохом файле

OTOH, если ваши внутренние данные хорошо вписываются в реляционную модель и если их много, я бы порекомендовал SQLite - я сам использую их для одного из своих проектов.

Что касается опыта - я им пользуюсь, он хорошо работает и его легко интегрировать с существующим кодом. Если бы с документацией было легче ориентироваться, я бы дал ей 5 звезд - как и я - 4.

4 голосов
/ 29 марта 2009

Как всегда, решения «одного размера для всех» не существует

Если вам нужно хранить данные в отдельном файле и вы можете воспользоваться возможностями реляционной базы данных базы данных SQL, тогда SQLite - это прекрасно.

Если ваши данные не подходят для реляционной модели (например, иерархические данные), или вы хотите, чтобы ваши данные были удобочитаемыми (файлы конфигурации), или вам нужно взаимодействовать с другой системой, чем SQLite не будет очень полезным и XML может быть лучше.

Если, с другой стороны, вам нужен одновременный доступ к данным из нескольких программ или компьютеров, то SQLite не является оптимальным выбором, и вам нужен «настоящий» сервер баз данных (MS SQL, Oracle, MySQL, PosgreSQL. ..).

1 голос
/ 30 марта 2009

Мне приятно работать с SQLite, но я бы не стал считать его универсальной заменой для fopen ().

В качестве примера я только что написал программу, которая загружает изображения с веб-сервера и кэширует их локально. Храня их как отдельные файлы, я могу просматривать их в проводнике Windows, что, безусловно, имеет свои преимущества. Но мне нужно сохранить индекс, который отображается между URL-адресом и файлом изображения, чтобы использовать кеш. Храня их в базе данных SQLite, они все находятся в одном аккуратном маленьком файле, и я могу получить к ним доступ по URL (выберите imgdata из кэша, где url = 'http://foo.bar.jpg') без особых усилий.

1 голос
/ 29 марта 2009

Атомность SQLite - это плюс. Зная, что если вы наполовину напишите некоторые данные (может быть, сбой в середине), это не повредит ваш файл данных. Обычно я выполняю что-то подобное с файлами конфигурации xml, создавая резервную копию файла при успешной загрузке, и любая неудачная загрузка в будущем (с указанием повреждения) автоматически восстанавливает последнюю резервную копию. Конечно, это не так грандиозно и не атомарно, но этого достаточно для моих желаний.

...