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