Я работаю над проектом, который включает в себя множество клиентов, подключающихся к серверу (если это потребуется), содержащий кучу информации о графе (node атрибуты и ребра). У них будет возможность ввести новый node или edge в любое время, когда они захотят, а затем запросить некоторую информацию из графика в целом (кратчайшее расстояние между двумя узлами, раскраска графа и т.д.).
Это, очевидно, довольно легко разработать наивный алгоритм для, но затем я пытаюсь научиться масштабировать его, чтобы он мог обрабатывать множество пользователей, обновляющих график одновременно, многие пользователи, запрашивающие информацию с графика, и возможность обработки очень больших (500k +) узлов и, возможно, очень большого количества ребер.
Проблемы, которые я могу предвидеть:
- с постоянно обновляемым графиком, мне нужно обрабатывать весь график каждый раз, когда кто-то запрашивает информацию... что значительно увеличит время вычисления и латентность.
- с очень большим графиком, время вычисления и латентность, очевидно, будут намного выше (я читал, что некоторые из них исправлялись путем пакетной обработки тонны результатов и хранения их с индексом для последующего использования... но то, поскольку мой график постоянно обновляется, и пользователи хотят получать самую последнюю информацию, это не жизнеспособное решение).
- большое количество пользователей, запрашивающих информацию, которая будет довольно загружаться на серверах, поскольку она должна обрабатывать график, который много раз
Как мне начать сталкиваться с этими проблемами? Я смотрел на хаос и искру, но они, похоже, имеют решения с высокой задержкой (с пакетной обработкой) или решения, которые решают проблемы, когда график не меняется постоянно.
У меня возникла идея обрабатывать различные части графика и индексировать их, а затем отслеживать, где график обновляется и перерабатывать этот раздел графика (своего рода подход к распределенному динамическому программированию), но im not уверен, насколько это возможно.
Спасибо!