Scala Neo4j图形数据库帮助存储多个基于时间的数据值,模拟结果

Scala Neo4j图形数据库帮助存储多个基于时间的数据值,模拟结果,scala,geospatial,simulation,neo4j,graph-databases,Scala,Geospatial,Simulation,Neo4j,Graph Databases,我们已经用scala()编写了城市系统的现有模拟,并使用ABM(基于代理的模型)。每个城市在模拟中等于一个代理 想象一个类似Simcity或best的游戏,一个类似Anno的游戏,世界各地的不同城市(我们的城市代理商的环境)交换不同类型的价值/商品,如下所示: 范围规则(城市与城市中的其他城市交换数据) 局部区域(范围规则的功能) 多种市场交易规则(规则随时间出现/变化, 因为城市功能出现在模拟中(例如 工业革命增加了新的规则,新的交流范围),所以城市 与其他城市的联系也会随着时间的推移而改变

我们已经用scala()编写了城市系统的现有模拟,并使用ABM(基于代理的模型)。每个城市在模拟中等于一个代理

想象一个类似Simcity或best的游戏,一个类似Anno的游戏,世界各地的不同城市(我们的城市代理商的环境)交换不同类型的价值/商品,如下所示:

  • 范围规则(城市与城市中的其他城市交换数据) 局部区域(范围规则的功能)

  • 多种市场交易规则(规则随时间出现/变化, 因为城市功能出现在模拟中(例如 工业革命增加了新的规则,新的交流范围),所以城市 与其他城市的联系也会随着时间的推移而改变…请参见此处了解更多信息 有关模型规则的详细信息 )

模拟后,我们需要按时间、城市和城市功能导出和可视化数据。因此,我们选择在模拟期间将城市之间的所有交换历史存储到一个具有“时间”键的hashmap中。此hashmap返回一个对象区域,其中包含cities对象+cities+之间的关系以及所有交换的值

我不确定,但我认为将数据和此类关系存储到空间图形数据库(spatial neo4j或其他更好的解决方案?)是一个好主意(比使用Rdbms更好的主意)

但是我对这个解决方案有多个问题(如果它是一个好的解决方案):

  • 您认为我每次都需要存储一个新的图形,还是只需要在末尾存储一个大的图形

    =>因此如何使用这种类型的图形存储基于时间的属性?

  • 我可以用这个图对我现有的空间化图进行更复杂的查询(计算城市之间的星型最短路径、计算交互次数等),并将这些结果用于我的模拟吗

  • 如何将现有图形轻松导出或导入到模拟中

    =>那么,考虑到基于时间的领域的难度,我如何轻松地映射图形对象和模拟代理对象呢?

更新1

最后,我用neo4j空间选择了neo4j,现在我尝试用neo4j形式主义来表示我的问题。我举了一个比原始问题更简单的例子,我认为,如果我能实现这种形式主义,这是一个很好的用例(第一个?),用于使用neo4j存储未来的模拟数据

  • 在模拟的每个步骤中,城市在空间上下文中用ABM表示(在我们的模型中,一个城市=一个代理)(因此一个城市=一个节点)仅与近邻(半径限制)通信

  • 城市在自己的市场上有一个创新池,其他城市也可以得到这种创新,一步一步地由城市连接起来

  • 在每一步中,一个城市都会尝试用其距离的概率函数复制每个邻居的一项创新,然后尝试创新/创造新的创新

  • 创新图很重要,因为我想查看任何创新在时间上扩散的结果(我们模拟的步骤)

  • 这是一个复杂的事实,创新无法消除,因为在我们消除扩散的可能性之后,每一个创新都包含一个生命属性

我用我的表示启动了一个google共享图,如果你能帮我更正,这很好:)

提前感谢您的建议,
SR

尝试模拟OpenTSDB的模式设计,尽管该模式遵循基于列族的方法(HBase)


请特别注意关键设计,因为它为基于时间维度的数据集提供了行分组(按时间片)的优势

我们讨论了多少事件?您可以在Neo4j Spatial中将不同的时间范围索引为不同的层,例如每小时一层,然后只搜索或分析感兴趣的层

此外,您还可以通过添加时间索引结构(请记住,整个图形是完整的,并且是一个拓扑结构)来再次索引它们,请参见例如


从Neo4j空间索引中处理的几何体节点,可以访问任何连接的域节点(如事件等),从而在遍历过程中检查任何内容。有关示例,请参见。

谢谢您的解释。在这里,我们在100个或1000个城市之间有1000个交换,我们需要存储1000个、2000个或4000个无问题的成功领土状态(例如,一个州一年,因此我们需要存储4000年的模拟)100.000个节点,用于在时间之间共享的创新对象,4000个时间步长,100个城市,按城市逐步平均交换5或10次;由于我们的模型是随机的,而且创新是概率函数,所以很难给出更精确的数据信息。