2012-03-04 2 views
3

Мне нужно выбрать постоянное хранилище для моего приложения, и поэтому я должен решить, следует ли выбирать локальную базу данных (в SQL Server Compact 3.5 Database) или XML-файл. В основном, приложение должно очень часто обновлять некоторые данные в таблице: каждая строка этой таблицы состоит из GUID (в качестве первичного ключа), двух столбцов DateTime, двух столбцов TimeSpan и четырех столбцов double.Должен ли я использовать локальную базу данных или файл XML?

Эта таблица может состоять из тысяч строк, и некоторые из этих строк (около 10%) обновляются очень часто, где каждое обновление состоит из следующих операций:

  • извлечение текущих значений Связанные с GUID;
  • сравнить эти значения с некоторыми данными для получения новые значения;
  • перезаписать текущие значения новыми значениями.

Строки, которые обновляются (выше 10%), не всегда одинаковы, но они могут постепенно меняться во время выполнения программы.

Если я сохраню эту таблицу в файле XML, как только приложение запустится, уровень доступа к данным загрузит данные из файла XML в Dictionary<Guid, ...>, чтобы получить лучшую производительность. Затем, когда приложение завершается, файл XML перезаписывается данными, обновленными в словаре, потому что я считаю, что нет возможности обновлять определенные части XML-файла. Это тот подход, который я использую в настоящее время.

  1. Каковы преимущества использования локальной базы данных вместо XML-файла? Я считаю, что если я использую локальную базу данных, я мог бы обойтись без Dictionary<Guid, ...>, тогда уровень доступа к данным был бы проще.
  2. Какие недостатки могут иметь локальную базу данных, чем текущий подход на основе «XML/Dictionary»?
+0

Что произойдет, если пользователь откроет ваше приложение на несколько часов, и APP завершится с ошибками до того, как будет сохранен XML? – Rippo

+0

@Rippo: все обновления будут потеряны. Но если я делаю регулярные обновления (перезаписи) файла, меньшее количество обновлений будет потеряно. – enzom83

+0

Определите «очень часто» - это довольно ключевой бит информации ... – Murph

ответ

4

Если ваше приложение выходит из строя, файл XML может не сохраниться. Или, что еще хуже, это может быть искалечено. Можно уменьшить эту ошибку, обернув свою программу в try/finally и написав XML в finally, но это все еще открывает вам возможность манипулирования XML.

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

Однако использование подхода XML/Dictionary по-прежнему очень быстро из-за того, что это все транзакции в памяти. До тех пор, пока вы не заботитесь о целостности данных, это очень жизнеспособный подход.

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

+1

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

+0

определенно не собирается «вырезать горчицу»;) – kelloti

Смежные вопросы