Как справиться с параллелизмом БД в клиент-серверном приложении в C #? - PullRequest
1 голос
/ 10 апреля 2010
  1. Я разрабатываю приложение на C # WPF, которое будет иметь архитектуру клиент-сервер (клиент будет оплачивать продажи продуктов). Я новичок в этой области, и я задал этот вопрос, чтобы начать процесс разработки. Нажмите здесь, чтобы посмотреть вопрос.

    Итак, в конечном итоге я выбрал MySQl, WCf & WPF. Теперь у меня есть один глупый вопрос. Нужно ли мне явно обрабатывать параллелизм БД в моем приложении (например, 3 клиента вставляют данные одновременно) или MySQl справится с этим без какого-либо конфликта?
  2. Для реализации моего проекта я подумал, что создам в WCf службу, которая будет выполнять запросы к БД из клиентского приложения. Есть ли у вас какие-либо предложения по улучшению производительности моего приложения.

Ответы [ 3 ]

4 голосов
/ 10 апреля 2010

Что касается вашего вопроса о параллелизме, ваше приложение должно быть спроектировано так, чтобы соединения с базой данных были как можно более короткими. Каждое действие в базе данных должно включать: открывать соединение, действовать в базе данных, закрывать соединение, а не: открывать соединение, выполнять кучу работы, которая может или не может быть связана с получением / обновлением / вставкой данных, а затем в конце "закрыть соединение.

Теперь, что касается параллелизма приложений, у вас есть два сценария. В первом сценарии, который я назову «последняя запись выигрывает», любое соединение, которое записывает в данную строку последним, является версией сохраняемых данных. Если Алиса затем Боб пишет в столбец Имя в той же строке в то же время, версия Боба будет то, что сохраняется. Это, безусловно, самое простое, но если у вас может быть много людей, обновляющих одни и те же данные, это может быть проблематично.

Альтернативой является «первый выигрыш при записи», также называемый оптимистичным параллелизмом. В этом сценарии второй вызов проверяет, что данные не изменились с момента их последнего извлечения, и если это произойдет, то транзакция будет откатана. Что будет дальше, зависит от вашего приложения. Некоторые системы просто выдают ошибку и требуют, чтобы пользователь повторно ввел свою информацию (отбрасывая свое первоначальное изменение). Это очевидно легче осуществить. Некоторые приложения сообщают пользователю, что данные изменились, и предоставляют некоторую информацию о том, что отличается, и спрашивают, хотят ли они перезаписать это изменение. Это может быть сложнее в зависимости от архитектуры вашей системы.

Подробнее см. Оптимистичный параллелизм .

1 голос
/ 10 апреля 2010

Существует несколько способов обработки параллелизма, каждый из которых имеет свои плюсы и минусы.

Эта статья дает хорошее общее введение.

Если вы хотите больше рассказать о своих требованиях относительно параллелизма:

  • Что вы ХОТИТЕ случиться, когда несколько человек пытаются редактировать одно и то же данные?
  • Как часто вы ожидаете, что пользователи будут редактировать одни и те же данные?

Я был бы рад дать более конкретный совет.

0 голосов
/ 10 апреля 2010
  1. Серверы баз данных довольно хорошо справляются с несколькими обновлениями.
  2. Использовать netTcpBinding .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...