我们正在使用Neo4j 3.4企业版作为应用程序的数据存储。它运行在具有8核CPU和16GB RAM的EC2实例上。
我们已经上传了这些数据集:
这是我们设计的通用模型,可以容纳不同类型的数据集。
该模型基于以下箭头图-
我们正在其上运行的查询的类型不依赖于数据集所属的应用程序的类型。这是一个通用用例,其中我们试图获取与在同一“时间”或“位置”发生的事件相关的所有详细信息。
设计理念:
我们希望在上述这些数据集之间执行JOIN。结果集应该在这三个提到的数据集之间返回一个INNER JOIN,以便说出三个数据集(如美元销售额,每日天气和印象)中的每个事实。这些将按来自所有三个数据集的维度组合分组显示。 该数据库具有1M个节点和2M个关系。
Neo4j配置为最多使用总系统内存16 GB的80%。 明显的问题–
我们的查询正在组合爆炸,如下图所示。我们研究了查询执行计划,该计划在几个阶段中反映了命中率超过1亿的数据库的数量。
每个标签的统计信息很少
我们想从两个数据集(即销售和发货)中获取事实。当我们通过SKU_IRI和SKU_Dist连接PosSales和DistributorShipments节点时,正在发生组合爆炸。
我们应该如何应对组合爆炸?
有没有更好的建模图表的方法来避免这些类型的问题?
我是否可以在Neo4j服务器上进行一些配置或设置调整,使其可以使用更多未充分利用的RAM和CPU,从而使查询运行更快?