Дизайн веб-приложений Live Data - PullRequest
0 голосов
/ 04 ноября 2010

Я собираюсь начать разработку архитектуры личного проекта, который имеет следующие характеристики:

  1. По сути, «игра», в которой участвуют несколько одновременно работающих пользователей на основе вида спорта.
  2. Матчи в этом виде спорта регулярно моделируются, а их результаты сохраняются в базе данных.
  3. Пользователи могут просматривать детали имитируемого матча в режиме реального времени, когда он происходит, а также видеть результаты после того, как они произошли.

Я разработал аналогичное веб-приложение с гораздо меньшей областью применения, как и предыдущая итерация этого проекта. В этом случае, однако, я выбрал SQLite в качестве поставщика БД, поскольку у меня также было распространяемое настольное приложение, которое можно было использовать для ручного моделирования совпадений (и фактически оно работало как автономный симулятор вне веб-приложения). Мои ограничения теперь превратились только в веб-приложение, поэтому мне не нужно беспокоиться об этом дополнительном уровне сложности.

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

Инструменты, которые я буду использовать:

  1. ASP.NET для веб-приложения.
  2. SQL Server 2008 R2 для базы данных ... возможно, со слоем NHibernate для реляционного сопоставления объектов.

Мой вопрос: как мне спроектировать это так, чтобы я достиг оптимальной эффективности и одновременного доступа? Очевидно, что переход к реальному серверу БД из файла будет иметь свои плюсы, но нужно ли мне иметь два резервных сервера - один для процесса моделирования и один для процесса веб-сервера?

Будем благодарны за любые предложения!

Спасибо.

1 Ответ

1 голос
/ 04 ноября 2010

У вас должно быть все в порядке в одной и той же базе данных.Параллельный доступ - это то, для чего предназначены современные движки баз данных.Параллельное чтение обычно не является проблемой вообще;одновременные записи блокируют минимально возможный объем данных (таблицу или даже просто ряд строк), а не всю базу данных.

Однако следует иметь в виду несколько вещей:

  • Используйте транзакции с умом.С одной стороны, транзакция является важным инструментом для обеспечения постоянной согласованности вашей базы данных - короче говоря, транзакция либо происходит полностью, либо не происходит вообще.С другой стороны, две одновременные транзакции могут привести к взаимоблокировкам, и эти баггеры могут быть чрезвычайно сложны для отладки.
  • Нормализовать и использовать ограничения для защиты целостности данных.Использование внешних ключей может сэкономить время, хотя это часто приводит к более громоздкому администрированию.
  • Минимизируйте время, затрачиваемое на доступ к данным: не держите соединения, когда они вам не нужны, делайте абсолютноубедитесь, что вы не пропускаете никаких соединений, не извлекайте данные, в которых вы не нуждаетесь, выполняйте столько же обработки данных (особенно тех, которые можно решить с помощью объединений, подзапросов, группировок, представлений и т. д.) в SQL вместоиз в коде
...