【发布时间】:2016-07-04 06:57:56
【问题描述】:
为了简单起见,作为时间序列数据的 ETL 的一部分,我在每一行中添加了一个序列号属性,对应于 0..370365(370,366 个节点,5,555,490 个属性 - 不是那么大)。我后来添加了第二个属性并将其命名为“outeseq”(原始)和“ineseq”(第二个),以查看建立关系的完全等价是否可以加快速度。
我可以让以下两个查询在最多约 30k 节点(LIMIT 30000)上正常运行,但除此之外,它只是无休止的等待。我的 JVM 最大 16g(如果它甚至可以在 Windows 机器上使用它):
MATCH (a:BOOK),(b:BOOK)
WHERE a.outeseq=b.outeseq-1
MERGE (a)-[s:FORWARD_SEQ]->(b)
RETURN s;
或
MATCH (a:BOOK),(b:BOOK)
WHERE a.outeseq=b.ineseq
MERGE (a)-[s:FORWARD_SEQ]->(b)
RETURN s;
我还添加了这些以希望加快速度:
CREATE CONSTRAINT ON (a:BOOK)
ASSERT a.outeseq IS UNIQUE
CREATE CONSTRAINT ON (b:BOOK)
ASSERT b.ineseq IS UNIQUE
我无法为整个数据集创建关系!救命!
另外,我也可以得到一些用参数构建的关系,但还没有弄清楚如何在所有节点到节点的顺序关系上参数化序列,至少在语义上不够通用的方式这样做。
我对查询进行了分析,但没有看到任何“爆炸”的原因。
另一个问题:我希望每个关系都有一个属性来表示每个节点或 delta-t 的时间戳差异。有没有办法获取两个顺序节点中两个值之间的差异,并将其分配给关系?....同时为所有关系?
最后一个 Q,如果你有时间的话——我真的很想使用原始数据,并将直接关系从一个节点的戳记链接到具有最小增量的下一个最近节点,但运行不正确这是因为担心它会导致扫描所有节点以建立每个关系。
在有人建议我使用 KDB 或其他数据库来获取时间序列之前,让我说我有一个非常具体的理由想要使用 DAG 表示。
看起来这应该很容易......它可能是而且我是盲人。谢谢!
【问题讨论】:
-
另外一点 - 我尝试使用“LOAD CSV”从代理邻接列表中创建关系,但无法使其正常工作。我修改了我可以在网上找到的 4 或 5 个示例,但无法使这种方法发挥作用。如果有人有一个更接近我所追求的代码 sn-p,那可能就是票。 CSV 有 ineseq: toInt(line.ineseq), outeseq: toInt(line.outeseq), timestamp: toFloat(line.timestamp) 可用。