Java распределенное клиент-серверное приложение + rdbms и проблемы параллелизма - PullRequest
0 голосов
/ 05 мая 2020

В контексте университетского проекта мы должны разработать распределенное приложение Java со следующими требованиями:

  • Приложение будет следовать схеме клиент-сервер classi c с несколькими клиенты подключаются к центральному серверу на другом компьютере, на котором также размещается rdbms, к которому сервер подключается
  • Реляционная база данных, которую мы должны использовать: postgresql (последняя версия)
  • И клиент, и сервер должен быть написан на Java
  • Мы должны использовать собственный JDB C для доступа к базе данных (мы не можем использовать фреймворки, такие как Spring)

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: пожалуйста, поймите, что мы - всего лишь группа студентов, и это наш первый большой проект, включающий все эти аспекты, и мы ни в коем случае не эксперты, поэтому, пожалуйста, проявите терпение :) (также английский sh не является нашим родным языком, извините за любые ошибку, которую вы можете найти)

В настоящее время мы находимся на этапе разработки приложения (диаграммы классов, диаграммы последовательности и т. д. c), и мы застряли с возможной проблемой параллелизма с базой данных: в идеале наш сервер будет прослушивать любые запросы, и для каждого клиента, который регистрируется в приложении, сервер запускает выделенный поток, который предоставляет реализованные услуги пользователю (реализация шаблона прокси-скелета с базой c программирование сокетов). Каждый из этих поставщиков услуг (потоков) после выполнения запрошенной задачи должен обновить / вставить / удалить данные в базе данных. Вот в чем проблема: как нам здесь управлять параллелизмом? Мы попытались найти в inte rnet проблему такого рода и обнаружили некоторые вещи, но все еще очень запутались:

  • Поскольку мы фактически взаимодействуем с базой данных с одного центрального сервера (с один профиль администратора) мы могли бы реализовать систему очередей для различных транзакций, поступающих из разных запущенных нами потоков
  • Мы управляем параллелизмом на уровне базы данных с помощью некоторого хорошо известного механизма, такого как MV CC, который, по-видимому, является намного сложнее

В идеале мы хотели бы, чтобы запросы на чтение не блокировали другие операции чтения или записи, а записи только блокировали другие записи (что, похоже, имеет место с MV CC). Какая альтернатива была бы лучше? Есть ли другие варианты, которые мы могли бы реализовать с указанными выше ограничениями? Заранее благодарим за любое предложение

...