gpt4 book ai didi

graph - Cassandra 上的 Titan 地理数据

转载 作者:行者123 更新时间:2023-12-04 15:11:31 31 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

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

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

高温高压

关于graph - Cassandra 上的 Titan 地理数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22419081/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com