【问题标题】:Fast way to count all vertices (with property x)计算所有顶点的快速方法(使用属性 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.) 同样的问题与边缘......

【问题讨论】:

标签: nosql gremlin titan


【解决方案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 作业中更新它,这样您就可以方便地使用它。通常,如果您有数百万个顶点,那么前一小时的计数并不是那么灾难。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    相关资源
    最近更新 更多