我正在寻找使用Titan来创建可扩展的地理空间数据存储(我在想R树).在文档中,有一个GeoShape
查询,文档说titan可以使用Lucene或ElasticSearch执行地理数据.但是,看起来这会非常慢,因为在cassandra中遍历节点本质上是在cassandra中进行连接查询,这是一个非常糟糕的主意.我想我可能会误解数据表示.
我阅读了Titan数据模型文档,但我仍然不太了解它.如果所有边都存储在Cassandra行中,那么Titan仍然必须在顶点表上"连接".解决此问题的一种方法是使列值等于边属性数据,然后您可以将顶点数据和边数据整齐地打包到行中.但是,当您想要执行超过1个节点的查询时,这会中断,我们又会再次回到加入问题.
所以.Titan是否在Cassandra中模拟连接查询? - 和 - 在这些条件下地理查找的性能如何?
我认为这个问题将边缘遍历与地理空间索引查找混为一谈.它们在API和实现级别都是分开的.索引未在数据模型图片中示出.
让我们更具体一点.假设我使用Murmur3Partitioner或RandomPartitioner与ES和Cassandra一起运行Titan.我在边缘称为"地点"的ES地理空间索引,如"入门"页面中所述.通过地理空间查询(例如"入门"文档中的"WITHIN")查找边缘,首先点击ES.ES返回ID Titan可以用来快速查找Cassandra中相关的顶点/边缘数据,而无需对关系连接进行模拟.
地理空间数据进行这些边缘查找的成本应该大致相当于ES WITHIN
实现的成本(我认为委托给Spatial4j),加上Titan在获取ID后对Cassandra进行的查找,这些ID应该与边缘数量大致呈线性关系ES发现.这只是背后的估计,所以请大量使用它.
在我通过地理匹配获得边缘之后,如果我想在集合中的每个边缘附近运行任意遍历,那么我将看看在头/尾顶点上生成MultiQuery并启用数据库级缓存.如果查询未命中缓存或缓存已冷/禁用,则Titan仍会尝试在可能的情况下检索遍历在每个顶点的单个Cassandra切片中所关注的所有边.如果您担心Titan的边缘遍历效率,那么您可能会发现带有Titan的Boutique Graph Data很有趣.
HTH