JavaRush/Java блог/Архив info.javarush/Доступ многих копий программы к удаленной базе данных
VasylHoshovsky
24 уровень

Доступ многих копий программы к удаленной базе данных

Статья из группы Архив info.javarush
участников
Добрый день! У меня появилась идея создания программы, которая в процесе работы будет брать данные с базы данных, работать с ними и обновлять. При этом база должна быть общей для всех копий программы, которые где-либо запустятся. Обдумав все, я дошел до вывода, что теоретически возможно выгрузить БД MySQL на хостинг и в программе прописать данные для доступа к ней (т. е. при каждом запуске каждой программы будет автоматически подключение к БД). Возможно лии это осуществить? Есть ли какие-либо подводные камни, о которых я не подумал? Спасибо!
Комментарии (6)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Artem
Уровень 22
20 августа 2014, 21:54
Ваш пост натолкнул на мысль, как работают игры типа wow и lineage… Допустим есть база MySQL, когда один-два человека — одно, а когда обращаются к одному значения с возможностью его изменить тысячи или миллионы? Пометить его как synchronized не вариант, не будет же очередь из 1кк людей ждать, пока все по очереди к этой записи БД обратятся.
VasylHoshovsky
Уровень 24
20 августа 2014, 22:47
Да, есть над чем задуматься.
Теперь вижу, что моя теория подходит только для тех случаев, когда все юзеры работают со своими частями БД, пересекаясь по-минимуму. Как же быть, когда все меняют одно значение? Конфликт выйдет…
Timur
Уровень 20
21 августа 2014, 23:08
Допустим есть база MySQL, когда один-два человека — одно, а когда обращаются к одному значения с возможностью его изменить тысячи или миллионы? Пометить его как synchronized не вариант, не будет же очередь из 1кк людей ждать, пока все по очереди к этой записи БД обратятся.

Вы правильно мыслите =) но СУБД обычно не дураки пишут.
MySQL поддерживает ACID dev.mysql.com/doc/refman/5.6/en/mysql-acid.html
или ru.wikipedia.org/wiki/ACID

Так как каждый раз создавать новое соединение не выгодно.
Для множества соединений существует настраивамый connection pool идея в том чтобы
изначально выделить кэш под соединения и потом их повторно использовать также как правило есть доп. настраиваимые опции но у всего есть лимиты
когда вы их исчерпаете нужно будет думать о маштабировании я знаю про два вида вертикальное
и горизонтальное первое значит что вы наращиваете мощность текущего сервака (апгрейд железа) второе добавляете новые серваки.
hubert
Уровень 41
19 августа 2014, 17:24
Любое веб приложение работает так. База и серверная часть в одном/нескольких экземплярах. Если же ты хочешь десктопное приложение, которое будет хранить данные не тько локально у юзера, но и где-то удаленно (как пример — офлайн игры с доступом в интернет для хранения ачивок и тд), то ты уже примерно опсиал реализацию.
VasylHoshovsky
Уровень 24
19 августа 2014, 17:15
Такое возможно или нужна «серверная» часть программы, которая будет кидать запросы в БД?
Timur
Уровень 20
21 августа 2014, 23:47
Я бы посоветовал использовать сервисы вроде Google Cloud Messaging (Android), App Engine и т.п. они позволяют реализовать принцип Tell Don't Ask т.е. сервак будет сам рассылать данные твоим юзерам если есть какие-либо изменения.

Также можешь почитать про Observer Pattern или Akka может решишь изобрести свой велосипед.