Хранилище данных .NET - База данных против одного файла

StackOverflow https://stackoverflow.com/questions/3514691

Вопрос

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

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

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

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

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

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

Решение

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

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

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

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

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

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

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

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


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

Плоский файл - Вы могли бы сохранить данные в виде 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-файла будет относительно медленным при запуске;но когда он будет загружен в память, победить его будет трудно.Для любой данной базы данных потребуется запустить механизм базы данных, выполнить вызовы взаимодействия / кросс-процесса / кросс-сети, загрузить результаты с диска (если он не кэширован механизмом) и т.д...

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

Вы можете использовать System.Data.SQLite Система.Данные.SQLite как .СЕТЕВАЯ оболочка.

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

Хорошо бы подошла база данных. SQLite - файл это хорошо, как уже упоминали другие.

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

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

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

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

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