Развертывание базы данных вместе с проектом - PullRequest
2 голосов
/ 02 февраля 2012

Мне нужно создать приложение, которое выполняет следующие действия:

  • Приложение будет установлено на нескольких компьютерах в одной сети

  • Будет компьютер, содержащий базу данных, к которой будут подключаться другие компьютеры. (Таким образом, существует версия программного обеспечения сервера и версия клиента)

  • Все компьютеры, на которых установлено приложение, должны иметь возможность выполнять операции CRUD (создание, чтение, ...) в базе данных.

  • База данных будет небольшой, то есть она должна иметь размер менее 1 ГБ.

Проблемы, которые у меня есть:

Я не знаю, какую базу данных использовать:

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

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

  • SQL Server Express - я считаю, что это будет моим лучшим вариантом. Я исследовал Интернет и обнаружил, что можно развернуть базу данных SQL Server Express с приложением. Я верю, что будет легко понять, как развернуть такую ​​базу данных с проектом, но было бы неплохо, если бы кто-то указал мне правильное направление, как удаленно подключаться к этой базе данных с компьютера в той же сети. База данных, очевидно, будет совместно использоваться в сети для достижения этой цели.

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

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

РЕДАКТИРОВАТЬ * * тысяча пятьдесят-одна Из ваших ответов видно, что мне нужно установить SQL Server Express или MySql на серверный компьютер. Проблема в том, что я должен сделать одну установку. Есть ли способ развертывания MySql или SQL Server Express при развертывании моего приложения. Возможно, мне нужно встроить mysql в приложение и заставить мое приложение каким-то образом его установить. Мой босс хочет иметь возможность устанавливать программное обеспечение без подключения к интернету. РЕДАКТИРОВАТЬ 2

Я думал, и эту часть будет очень трудно реализовать. Ребята, у вас есть идеи, как QuickBooks реализует свою базу данных? Я думаю, мне нужно что-то подобное. При установке Quickbooks вы выполняете только одну установку. Quick-book прекрасно справляется с одновременными подключениями. Они используют свою собственную базу данных? Oracle? MySQL? Я согласен со всеми вами. Будет так легко выполнить две установки. И будет чище. Программное обеспечение, которое я создаю, должно работать на Windows XP и более поздних версиях Windows.

Ответы [ 4 ]

4 голосов
/ 02 февраля 2012

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

Например, для установки 2005/2008 express существуют различные предварительные условия. Как. NET Framework. Затем есть патчи и обновления, затем открытие брандмауэра (ов) зависит от настроек. Различная топология / выбор ОС. Одноранговая, на основе домена, Active Directory, Terminal Services, citrix. Поэтому автоматическая установка без подключения к Интернету и использование установщика для БД практически невозможны, если только вы не обладаете жестким контролем над пользовательской средой.

Добро пожаловать в мир боли.

О, я уже упоминал о разрешениях, общих ресурсах, UAC, 32/64 бита (для сервера sql dmo и smo, возможно)

Хотите заблокировать установку в «несовместимых» средах?

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

и многие другие.

Бьюсь об заклад, вы просто не можете дождаться, чтобы проверить все возможные комбинации.

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

Возвращайся и напугай до смерти своего босса.

2 голосов
/ 02 февраля 2012

Я бы порекомендовал Sql Server Express, установленный на сервере в вашей сети.Microsoft Access не очень хорошо обрабатывает несколько одновременных подключений и не очень эффективен при доступе с удаленного компьютера.

Вам не нужно беспокоиться о развертывании базы данных с помощью клиентского приложения, вы можете установить Sql Server.Экспресс прямо на сервере.(Это нужно сделать только один раз).Вам необходимо настроить Sql Server Express для приема удаленных подключений после его установки на сервере.

1 голос
/ 05 февраля 2012

В нескольких статьях в Интернете упоминается, что SQLite не очень хорош для обработки нескольких соединений, если все соединения записывают в одну и ту же базу данных. Наконец мне удалось развернуть приложение с помощью SQL Server 2008 Express. Я также развернул свое приложение с SQLite (скачал последнюю версию для .NET Framework 4). Поскольку я планирую использовать эту базу данных только в локальной сети (LAN), я попробовал SQLite. Я был впечатлен эффективностью SQLite. Я проверил базу данных, соединяя с четырьмя компьютерами символически и постоянно записывая данные (вставки) в базу данных. Данные не были потеряны. Когда я делал это с помощью SQL Express, это также было очень эффективно, и я не мог заметить очевидную разницу. Может быть, вы увидите реальную разницу, когда, к примеру, подключите 50 компьютеров, например, на веб-сервере.

Другие хорошие особенности SQLite заключаются в том, что развертывание не занимает много времени. Также нет постоянно работающих тяжелых сервисов. Я думаю, что SQLite - лучший выбор, чем SQL Express. Более того, SQLexpress будет использовать только 1 процессор, а база данных ограничена 2 ГБ.

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

P.S. Мне интересно посмотреть, как последняя версия SQLite будет обрабатывать несколько соединений по сравнению с SQLexpress. Я постараюсь в ближайшее время протестировать больше компьютеров и каждый компьютер работает с несколькими потоками, каждый поток выполняет вставку в базу данных. может быть, я увижу большую разницу с этим сценарием.

1 голос
/ 02 февраля 2012

SQLexpress поддерживает несколько соединений.Поэтому, если вы подключаете базу данных на «серверном» компьютере, вы можете подключиться с клиентов так же, как и к локальной базе данных (при условии, что эти компьютеры находятся в локальной сети или в сети VPN).

...