Наиболее подходящая база данных для распределенной платформы с (обычными) временно недоступными первичными (облачными) серверами
В настоящее время я работаю над проектом, который будет иметь два уровня базы данных в своей топологии:
Global Primary Use Database - эта основная база данных будет для родительской организации. Эта база данных будет хранить пользователей, настраивать события, данные веб-страниц и различную другую высокоуровневую информацию, которая будет использоваться для заполнения общедоступных веб-страниц. В них будут размещаться информационные данные, а также место назначения для информации о событиях и место, где люди могут зарегистрироваться для этих событий.
Региональные базы данных использования. Эта вторичная база данных извлекает данные из первичной базы данных (прежде всего, информацию о событии) и использует эти данные на локальном сервере, на котором выполняется событие. Этот сервер будет использоваться для управления регистрационной информацией (платежи, пользовательские данные и т. Д.), А также для сбора данных в режиме реального времени на мероприятии (эти события будут соревновательными событиями, где мы будем собирать данные о времени и оценке).
В большинстве случаев мы должны иметь живое соединение между локальным сайтом и первичными серверами баз данных и, вероятно, иметь дело с большинством регистрационных данных непосредственно на этом сервере. Однако в некоторых случаях, когда подключение плохое или отсутствует, возможно, нам потребуется извлечь эти данные с основного сервера до начала регистрации события на месте и работы из локальной базы данных. Затем эта локальная база данных будет подключена к локальной сети Wi-Fi, которая может распространять результаты среди участников мероприятия (размер мероприятия варьируется от 50 до 1400 человек - не более 40 человек рассчитываются и рассчитываются на одного человека). После этого события нам необходимо будет снова подключиться к основным серверам баз данных для синхронизации с этими данными (передача данных на основные серверы). Система должна быть в состоянии быть настроенной так, чтобы данные, извлекаемые с основного сервера, оставались неизменными до тех пор, пока не произойдет повторная синхронизация, поэтому нам не нужно беспокоиться о получении каких-либо данных.
Итак... какую базу данных я использую?
После некоторого поиска кажется, что CouchDB особенно хорош в согласовании многоуровневых систем, подобных этой, и в создании логики для синхронизации баз данных с момента, когда подключение прекращается, до перезапуска. Однако, поскольку возможно, что мы будем обновлять данные довольно часто из-за того, как работает наше время и оценка, мне нравится возможность некоторых БД работать с частичной записью документов (Patching, например, в MongoDB). Кажется, что это немного больше проблема моделирования данных, чтобы убедиться, что данные настроены так, что несколько пользователей могут записывать в соответствующие данные, не разбивая их (например, обычно два пользователя работают для мониторинга живых данных - один ввод в участника данные и другой мониторинг тех участников на предмет штрафов).
Я хотел бы использовать что-то, перед чем я смогу прикрепить сервер GraphQL, но на данный момент это не является абсолютным требованием. Внешний интерфейс написан на React, а внутренний - Node.js. Я использовал Google Cloud для своей тестовой платформы, но он может перейти на AWS (я еще не посвящен какой-либо конкретной облачной платформе, чтобы выполнять все это). Большинство моих доказательств концептуальных вещей размещаются через Loopback-сервер, чтобы помочь мне все моделировать. Я тоже смотрел на Neo4j с точки зрения графика и на AWS AppSync (мне нравится, как это выглядит как "состояние на сервере"), но именно этот "локальный" слой дает мне некоторую паузу в отношении окончательного выбора.
Спасибо!