Вопрос

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

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

Есть ли у вас какой-то опыт в этом?

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

Другие советы

Как всегда это зависит, нет никаких решений «Один размер подходит всем»

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

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

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

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

Я считаю SQLite приятно работать, но я бы не стал считать это заменой универсального подхода для Fopen ().

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top