计算所有顶点的快速方法(使用属性 x)
Posted
技术标签:
【中文标题】计算所有顶点的快速方法(使用属性 x)【英文标题】:Fast way to count all vertices (with property x) 【发布时间】:2014-02-23 22:48:46 【问题描述】:我将 Titan 与 Cassandra 一起使用,并且有几个(相关)关于使用 Gremlin 查询数据库的问题:
1.) 有没有比计算所有顶点更快的方法
g.V.count()
Titan 声称使用索引。但是如何使用没有属性的索引呢?
WARN c.t.t.g.transaction.StandardTitanTx - Query requires iterating over all vertices [<>]. For better performance, use indexes
2.) 有没有比计算属性“myProperty”的所有顶点更快的方法
g.V.has('myProperty').count()
再次泰坦意味着跟随:
WARN c.t.t.g.transaction.StandardTitanTx - Query requires iterating over all vertices [(myProperty<> null)]. For better performance, use indexes
但是,我该怎么做呢?我已经有一个“myProperty”的索引,但它需要一个快速查询的值。
3.) 同样的问题与边缘......
【问题讨论】:
重复***.com/questions/17214959/… 【参考方案1】:使用g.V.count()
迭代所有顶点是获取计数的唯一方法。它不能“更快”地完成。如果您的图表太大以至于需要几个小时才能得到答案,或者您的查询根本不会返回,您应该考虑使用Faunus。但是,即使使用 Faunus,您也可以期待等待您的回答(这就是 Hadoop 的本质……这里没有亚秒级响应),但至少您会得到一个。
每当您进行表扫描(即迭代所有顶点)时,您都会收到“迭代所有顶点”的警告。一般来说,你不想这样做,因为你永远不会得到回应。添加索引不会帮助您更快地计算所有顶点。
边有相同的答案。如果可以的话,在 Gremlin 中使用 g.E.count()
。如果花费的时间太长,请尝试 Faunus,这样您至少可以得到答案。
【讨论】:
你的意思是没有办法用 Titan 进行有效计数?我们应该考虑更新计数器吗? Titan 是否允许使用执行原子操作? 在 Titan 中,没有用于图形元素(即顶点/边)的内部计数器来有效地返回计数。我不知道其他蓝图实现是否也这样做(我在想“不”,但在 orientdb、neo4j 等的最新发展中可能是错误的)。关于“原子操作”问题,如果您打算使用 cassandra 或 hbase 后端,您可能应该阅读 Titan 文档的这一部分:s3.thinkaurelius.com/docs/titan/0.5.4/eventual-consistency.html 数据已经存在于 Cassandra 后端。我怎样才能在它上面实现 Fanus??【参考方案2】:在大型分布式图数据库中进行计数是昂贵的。您可以拥有一个节点来跟踪许多数据库的频繁聚合数,并从 cron 作业中更新它,这样您就可以方便地使用它。通常,如果您有数百万个顶点,那么前一小时的计数并不是那么灾难。
【讨论】:
以上是关于计算所有顶点的快速方法(使用属性 x)的主要内容,如果未能解决你的问题,请参考以下文章
由于OpenGL可以执行内置的背面剔除,因此它必须计算顶点法线;可以访问这些而不是将其作为属性发送吗?