具有多个属性的单个MixedIndex或具有单个属性的多个MixedIndex?

时间:2016-01-29 10:19:20

标签: database-design titan

我使用Titan 1.0.0和Cassandra作为存储后端,弹性搜索作为索引后端,想要建模一个具有多个顶点和边缘的复杂图形。我要考虑以下事项:

  1. 我应该选择多个具有单个属性的MixedIndexes,还是单个MixedIndex具有多个属性?

    mgmt.buildIndex('nameAndAge',Vertex.class).addKey(name,Mapping.TEXT.getParameter()).addKey(age,Mapping.TEXT.getParameter()).buildMixedIndex("search")
    
  2. OR

    mgmt.buildIndex('nameMixed',Vertex.class).addKey(name,Mapping.TEXT.getParameter()).buildMixedIndex("search")
    mgmt.buildIndex('ageMixed',Vertex.class).addKey(age,Mapping.TEXT.getParameter()).buildMixedIndex("search")
    
      

    如果我选择带有多个属性的singel Mixed index   然后它可以跨越边和顶点上的属性或者是否存在   任何准则?

    1. 在Vertices / Edges之间共享属性是否更好? 意思是我希望拥有财产" onDate"并将其用于边缘"注册"," MarriedTo"," AgreedToTerms"和顶点"顺序","旅行"。
    2.   

      如果该财产需要,是否有任何特殊考虑因素   有索引吗?

1 个答案:

答案 0 :(得分:2)

在这里查看说明文件

  

混合索引通过以前添加的属性键的任意组合检索顶点或边。

现在是第一个问题,

  • 如果您的目标是使用单个索引来查询任何/所有属性,请仅使用一个混合索引。假设您想拥有一个

实施例

String query="v.*:Phani"; // searches any property in the index with a value that includes `Phani`
Iterable<TitanIndexQuery.Result<TitanVertex>> result = titanGraph.indexQuery("name_mixed_index", query).vertices();

搜索您创建的混合索引的所有属性。如果您添加了10个添加到此索引的属性,它将搜索10,依此类推。

  • 如果您的目标只是查询一个属性,那么请使用复合索引。它快得多。

我的建议是,对所有感兴趣的属性使用单个混合索引,这样您就可以一次查询所有属性,或者使用您喜欢的任何组合查询它们。如果您想要单个索引,请使用复合索引。

关于第二个问题,

您不能跨索引和边共享相同的属性值。但是你可以在所有这些中拥有相同的属性名称。如果您打算查询单个属性,请瞄准复合索引。

简而言之,

是否有兴趣进行包含多个值或涉及订购的查询?使用具有多个属性的混合索引。 # 有兴趣仅对一个属性进行查询,请使用复合索引。

有关详情,请阅读文档here for Indexing in Titan 1.0.0