Хранение базы данных на диске, лучшие практики

Если этот вопрос кажется вам обычным, прошу прощения, я быстро поискал по этому сайту и несколько поисковых запросов в Google, но не смог найти удовлетворительного ответа.

У меня такой вопрос;

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

Фактические данные легковесны. В коде основным активом будет класс с несколькими строковыми свойствами, которые необходимо сохранить. Мои первоначальные мысли были о простой сериализации. При закрытии приложения новые ресурсы просто сериализуются и сохраняются на диске в виде файла. Я также, хотя, возможно, для целей резервного копирования (или если это как-то лучший вариант для сериализованного класса) подойдет файл XML.

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


person user407356    schedule 31.07.2010    source источник


Ответы (4)


Сериализация (двоичная или XML) подходит для небольшого количества данных. Проблема с этим подходом заключается в том, что вы получаете большие объемы данных (которые вам может потребоваться запросить).

Если вы работаете на платформе Windows и нуждаетесь в соответствующей базе данных, вы можете использовать встроенный механизм базы данных, который поставляется с Windows - ESENT. Это резервное хранилище Exchange и RavenDB.

Здесь находятся библиотеки оболочки .NET для этого.

ManagedEsent обеспечивает управляемый доступ к ESENT, встраиваемому ядру базы данных, встроенному в Windows. ManagedEsent использует файл esent.dll, входящий в состав Microsoft Windows, поэтому нет необходимости загружать и устанавливать дополнительные неуправляемые двоичные файлы.

person Oded    schedule 31.07.2010

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

Вот хороший учебник по сериализации XML.

Однако, если ваше приложение будет много читать, писать и изменять данные, и есть только один источник данных, было бы лучше использовать облегченную базу данных. Многим нравится SQLite, а я лично предпочитаю Firebird.

См. Этот вопрос об использовании SQLite с C # и см. здесь информацию об использовании Firebird с .net.

person Vincent McNabb    schedule 31.07.2010

Другой вариант встроенной базы данных - Sql Server Compact Edition. Последняя версия этого v4 и, кажется, значительно улучшен по сравнению с предыдущими версиями.

Функционально это эквивалентно использованию XML-файла, базы данных доступа или даже простого старого текстового файла, поскольку вам не нужно запускать службу Sql Server или устанавливать что-то особенное на машине, на которой работает ваше приложение.

person Rob    schedule 31.07.2010
comment
по прошествии времени: по состоянию на февраль 2013 года SQL Server Compact Edition устарел; никаких новых версий или обновлений не планируется, хотя Microsoft продолжит поддержку до июля 2021 года. Так что довольно скоро он перестанет поддерживаться. - person Luuk; 03.06.2021

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

Просмотрите эту ссылку для оболочки C #: http://sqlite.phxsoftware.com/

Я также использую NHibernate и NHibernate.Linq для взаимодействия с данными, вы можете получить сборку обоих, которые совместимы здесь: http://www.dennisdoomen.net/2009/07/nhibernate-210-ga-with-linq-and-fluent.html

NHibernate.Linq позволяет вам использовать этот красивый синтаксис запросов Linq в вашей базе данных Sqlite:

var onePiece = from s в session.Linq (), где s.Name == "One Piece" выберите s;

person theburningmonk    schedule 31.07.2010