Богатый интерфейс базы данных - как правильно обрабатывать сети низкого качества? - PullRequest
0 голосов
/ 27 ноября 2009

У меня очень ограниченный опыт программирования баз данных, и мои приложения для доступа к базам данных простые :). До сих пор :(. Мне нужно создать настольное приложение среднего размера (оно называется rich client?), Которое будет использовать базу данных в сети для обмена данными между несколькими пользователями. Скорее всего, я буду использовать C # и MSSQL / MySQL / SQLite.

Я выполнил несколько тестов дисков и обнаружил, что в сетях низкого качества доступ к базе данных не так гладок. В локальной сети одной компании большое количество данных передается по сети, а серверы находятся в постоянной нагрузке, поэтому обычная ситуация, когда простой SQL-запрос INSERT или SELECT может занять 1-2 минуты или даже потерпеть неудачу из-за тайм-аута / сетевой ошибки.

Есть ли лучшие практики для решения таких ситуаций? Конечно, я могу разделить свое приложение на поток GUI и поток DB, чтобы проблемы с сетью не привели к зависанию GUI. Но что делать с большим количеством сетевых ошибок? Отображать их пользователю слишком часто будет не очень хорошо :(. Я думаю об автоматическом создании локальной копии базы данных на каждом компьютере, на котором работает мое приложение: сначала обновите локальную базу данных и синхронизируйте ее в фоновом режиме, просто повторите попытку при сетевых ошибках. Это позволит приложению функционировать при возникновении значительных задержек / проблем в сети.

Какие-нибудь подсказки и модные слова, на что я могу посмотреть? Может быть, это уже некоторые лучшие практики, которые я не знаю :)

Ответы [ 2 ]

2 голосов
/ 27 ноября 2009

Извините, это, вероятно, не тот ответ, который вы ищете, но вы упоминаете, что простая вставка / обновление может занять 1-2 минуты или даже потерпеть неудачу из-за тайм-аута / ошибки сети

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

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

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

1 голос
/ 27 ноября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...