Графическая база данных Neo4j, помогающая хранить несколько временных значений данных, результат моделирования - PullRequest
2 голосов
/ 17 марта 2012

У нас есть симуляция системы городов, написанная в scala (https://forge.iscpif.fr/projects/simpop2/repository/revisions/dev/show/JSimpop) и использующая ABM (модели на основе агентов). Каждый город равен одному агенту в симуляции.

Представьте себе игру, похожую на Simcityили, лучше сказать, игра Anno, с различными городами, локализованными в мире (агентами наших городов), которые обмениваются различными типами ценностей / товаров следующим образом:

  • Правило области действия (обмен городамиданные с другими городами в локализованной области, функция правила определения объема)

  • Несколько правил обмена на рынке (правила появляются / меняются со временем из-за появления городских функций в симуляции (например,промышленная революция добавляет новые правила, новые возможности для обмена), поэтому связь городов с другими городами со временем также меняется ... см. здесь для получения дополнительной информации о правилах модели http://www.simpop.parisgeo.cnrs.fr/models/simpop2/cities-a)

После моделирования нам нужно экспортировать и визуализировать данные по времени, по городам и по городским функциям . Поэтому мы решили хранить все чИстория обмена между городами во время симуляции в хэш-карту с ключом, основанным на времени.Этот hashmap возвращает территорию объекта, которая содержит объект city + отношение между городами + и все обмененные значения.

Я не уверен, но я думаю, что это хорошая идея (лучшая идея, чем использование Rdbms?) Для хранения данных и этих типов отношений в базе данных пространственного графа (пространственный neo4j https://github.com/neo4j/spatial илидругое лучшее решение?).

Но у меня есть несколько вопросов об этом решении (, если это хорошее решение ):

  • Как вы думаете,мне нужно хранить новый график каждый раз, или большой график только в конце?

    => Итак, как я могу сохранить атрибут на основе времени с этим типом графика?

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

  • Как я могу легко экспортировать или импортировать существующий график в мое моделирование?

    => Так, как я могу легко отобразить объект графа и объект агента моделирования, учитывая сложность территории, основанной на времени?

Обновление 1

Наконец, я выбрал neo4j с neo4j -atial, и теперьЯ пытаюсь представить мою проблему с neo4j формализмом.Я беру более простой пример для представления, чем исходный вопрос, и я думаю, что если я смогу реализовать этот формализм, это хороший вариант использования (первый?) Для будущего хранения данных моделирования с neo4j !!

  • Город представлен с помощью ПРО (в нашей модели один город = один агент-агент) в пространственном контексте (поэтому один город = один узел) связывается только с ближайшими соседями (предел радиуса) на каждом этапе моделирования.

  • В городе есть пул инноваций на своем собственном рынке, другие города могут получить это новшество, шаг за шагом подключившись к городу.

  • Вкаждый шаг, один город пытается скопировать одно новшество каждого соседа с функцией вероятности их расстояния, и после этого они пытаются вводить новшество / создавать новое новшество.

  • График нововведений важенпотому что я хочу увидеть результат распространения какого-либо нововведения во времени (шаг нашего моделирования).

  • Это осложняется тем фактом, что нововведение может исчезнуть, потому что каждое из них содержит жизньсвойство, после чего мы деактивируем возможность распространения.

image

Я запускаю общую диаграмму Google с моим представлением, если вы можете помочь мне исправить это,это здорово:)

ничья

Заранее спасибо за совет, SR

Ответы [ 2 ]

1 голос
/ 18 марта 2012

Сколько событий мы говорим? Вы можете индексировать разные временные диапазоны как разные слои в Neo4j Spatial, например, один слой в час, а затем искать или анализировать только те, которые интересны.

Кроме того, вы можете снова проиндексировать их, добавив конструкцию временного индекса (помните, что весь граф не поврежден и топология), см., Например, http://blog.neo4j.org/2012/02/modeling-multilevel-index-in-neoj4.html

Из узлов Geometry, с которыми вы имеете дело в пространственных индексах Neo4j, вы можете получить доступ к любым связанным узлам домена (например, вашим событиям и т. Д.) И, таким образом, что-либо проверить во время обхода. См. https://github.com/bartbaas/spatial/blob/master/src/test/java/org/neo4j/gis/spatial/pipes/GeoPipesTest.java для примеров.

0 голосов
/ 17 марта 2012

Попытка эмулировать дизайн схемы OpenTSDB http://opentsdb.net/schema.html, хотя схема следует подходу на основе семейства столбцов (HBase) ...

Обратите особое внимание на конструкцию ключа, поскольку она обеспечивает преимущество группировки строк (по временным срезам) для наборов данных на основе измерения времени

...