.NET Data Storage - база данных против одного файла - PullRequest
6 голосов
/ 18 августа 2010

У меня есть приложение на C #, которое позволяет одному пользователю вводить информацию о клиентах и ​​рабочих местах. Информация очень простая.

  • Заказчик: имя, номер, адрес, адрес электронной почты, связанный сайт работы.
  • Место работы: имя, местонахождение.

Вот мои спецификации, которые мне нужны для этой программы.

  • Нет ограничений на количество введенных данных.
  • Один пользователь на приложение. Нет одновременной активности или нескольких пользователей.
  • Разрешить экспорт пользовательских записей / данных во внешний файл, который может быть легко распространен между приложениями / пользователями.
  • Позволяет в пользовательских запросах отображать клиентов на основе различных комбинаций информации о клиенте / месте работы.
  • Данные никогда не будут просматриваться или обрабатываться за пределами приложения.
  • Программа будет работать почти всегда, свернутая на панель задач.
  • Время запуска не очень важно, однако я бы хотел, чтобы запросы выполнялись значительно быстрее.

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

Ответы [ 6 ]

4 голосов
/ 18 августа 2010

Вы снова задаете неправильный вопрос:)

Лучший вопрос: «Как мне создать приложение, которое позволит мне изменить реализацию хранилища данных?»

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


Если у вас есть интерфейс репозитория, вы можете попробовать реализации в самых разных подходах:

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

Распределенная БД - SQLite или SQL Compact отлично работают; они предлагают множество преимуществ БД и не требуют установки

Локальная БД - SQL Express является хорошим промежуточным звеном между облегченной и полнофункциональной БД. Доступ при правильном использовании может быть достаточным. Основное преимущество заключается в том, что он включен в MS Office (хотя и не установлен по умолчанию), а некоторым ИТ-группам удобнее устанавливать Access на компьютерах, чем SQL Express.

Полная БД - MySql, SQL Server, PostGreSQL и др.


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

Вот плюсы / минусы - перечислены ваши требования:

Против

  • Нет ограничений на количество введенных данных.
    • использование XML в памяти будет означать, что ваше приложение не будет масштабироваться. Он может легко обрабатывать 10 МБ файла данных, 100 МБ не должно быть проблемой (если у вашей системы недостаточно ОЗУ), кроме того, вы должны серьезно задуматься: «Могу ли я позволить себе столько памяти?».

Плюсы

  • Один пользователь на приложение. Нет одновременной активности или нескольких пользователей.
    • XML можно читать в память и удерживать процессом (на самом деле AppDomain). Он идеально подходит для однопользовательских сценариев, где параллелизм является очень узкой задачей.
  • Разрешить экспорт пользовательских записей / данных во внешний файл, который может быть легко распространен между приложениями / пользователями.
    • XML идеально подходит для экспорта, а также его легко импортировать в Excel, базы данных и т. Д. *
  • Позволяет в пользовательских запросах отображать клиентов на основе различных комбинаций информации о клиенте / информации о месте работы.
    • Linq-to-XML - ваш друг: D
  • Данные никогда не будут просматриваться или обрабатываться за пределами приложения.
    • .... тогда хранение его в памяти не вызывает проблем
  • Программа будет работать почти всегда, свернутая на панель задач.
    • , поэтому загрузка XML при запуске и запись при завершении работы будут приемлемыми (если файл очень большой, это может занять некоторое время)
  • Время запуска не очень важно, однако я бы хотел, чтобы запросы выполнялись значительно быстрее
    • Чтение XML будет относительно медленным при запуске; но когда он будет загружен в память, его будет трудно победить. Любая конкретная БД потребует, чтобы механизм БД был запущен, чтобы выполнялись вызовы взаимодействия / межпроцессного / межсетевого взаимодействия, чтобы результаты загружались с диска (если не кэшированы механизмом) и т. Д. *
4 голосов
/ 18 августа 2010

Мое предложение будет использовать SQLite.Вы можете найти его здесь: http://sqlite.org/. И вы можете найти версию оболочки C # здесь: http://sqlite.phxsoftware.com/

SQLite очень легок и имеет некоторые довольно мощные возможности для такого легковесного движка.Другой вариант, на который вы можете посмотреть - это Microsoft Access.

3 голосов
/ 18 августа 2010

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

Для легкой базы данных я предлагаю SQLite (произносится «SQL Lite»;)).Вы можете поискать учебники о том, как его настроить, а затем о том, как взаимодействовать с ним через код C #.Я также нашел ссылку на эту оболочку C # для SQLite, которая может выполнить большую часть работы за вас!

3 голосов
/ 18 августа 2010

Как насчет SQLite? Похоже, это хорошо подходит для вашего приложения.

Вы можете использовать System.Data.SQLite в качестве оболочки .NET.

0 голосов
/ 18 августа 2010

База данных подойдет. SQLite хорош, как уже говорили другие.

Вы также можете использовать локальный экземпляр SQL Server Express , чтобы воспользоваться преимуществами улучшенной интеграции с другими частями стека разработки Microsoft (поскольку вы упоминаете C #).

Третий вариант - это база данных документов, такая как Raven , которая может соответствовать звукам ваших данных.

редактировать
Четвертый вариант - попробовать Lightswitch , когда бета выйдет через несколько дней. (8-23-2010)
/ редактировать

Всегда будет ограничение на хранение данных (свободное место на жестком диске). Согласно википедии SQL Express ограничен 10 ГБ для SQL Server Express 2008 R2

0 голосов
/ 18 августа 2010

Вы можете получить SQL Server Express бесплатно.Я бы сказал, что вопрос не столько в том, почему вы должны использовать базу данных, а в том, почему вы не должны?Этот тип проблемы - именно то, для чего нужны базы данных, а SQL Server является очень мощной и широко используемой базой данных, поэтому, если вы собираетесь найти какое-то другое решение , вам необходимо предоставить вескую причину, по которой вы не захотитес базой данных.

...