Sqlite как замена fopen()?
Вопрос
На официальная веб-страница 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') С небольшим усилием.