【问题标题】:Titan geo data on CassandraCassandra 上的 Titan 地理数据
【发布时间】:2014-03-15 03:14:20
【问题描述】:

我正在考虑使用 Titan 创建可扩展的地理空间数据存储(我在考虑 R 树)。在文档中,有一个GeoShape 查询,文档说titan 可以使用Lucene 或ElasticSearch 做地理数据。但是,这似乎会很慢,因为在 cassandra 中遍历节点本质上是在 cassandra 中进行连接查询,这是一个非常糟糕的主意。我想我可能误解了数据表示。

我阅读了Titan Data Model doc,但我仍然不太明白。如果所有边都存储在 Cassandra 行中,那么 Titan 仍然必须在顶点表上“加入”。解决这个问题的一种方法是使列值等于边缘属性数据,然后您可以将顶点数据和边缘数据整齐地打包到行中。但是,当您想要进行比 1 个节点更深的查询时,这种情况就会出现问题,我们再次回到连接问题。

所以。 Titan 是否在 Cassandra 中模拟连接查询? - 和 - 在这些条件下,它在地理查找方面的性能如何?

【问题讨论】:

    标签: graph cassandra titan


    【解决方案1】:

    我认为这个问题将边缘遍历与地理空间索引查找混为一谈。这些在 API 和实现级别上是分开的。数据模型图片中没有说明索引。

    让我们更具体一点。假设我使用 Murmur3Partitioner 或 RandomPartitioner 使用 ES 和 Cassandra 运行 Titan。我在名为"place", as documented in the Getting Started page 的边上声明了一个 ES 地理空间索引。通过地理空间查询查找边缘,例如 "WITHIN" in the Getting Started docs,首先命中 ES。 ES 返回 ID,Titan 可以使用它在 Cassandra 中快速查找相关的顶点/边数据,而无需模拟关系连接。

    通过地理空间数据进行这些边缘查找的成本应该大致相当于 ES 的 WITHIN 实现的成本(我认为这是委托给 Spatial4j 的),加上 Titan 在获取 ID 后在 Cassandra 上进行的查找,这应该大致相当与 ES 找到的边数成线性关系。这只是粗略的估计,所以请持保留态度。

    在我通过地理匹配获得位置边缘之后,如果我想在集合中每个边缘的附近运行任意遍历,那么我会看看在头/尾顶点上生根 MultiQuery 并启用数据库级缓存。如果查询未命中缓存或缓存被冷/禁用,那么 Titan 仍将尝试在每个顶点的单个 Cassandra 切片中检索遍历关心的所有边(如果可能)。如果您担心 Titan 的边缘遍历效率,那么您可能会发现 Boutique Graph Data with Titan 很有趣。

    HTH

    【讨论】:

    • 你完全正确。我不明白索引后端如何适应。谢谢!
    猜你喜欢
    • 2015-05-13
    • 2016-09-03
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多