这实际上更多的是Lucene的问题,但它是在neo4j数据库的上下文中。Neo4j索引(与Lucene) - 组织节点“类型”的好方法?
我有一个数据库被分为50左右的节点类型(所以“集合”或“表”在其他类型的数据库)。每个都有一些需要编制索引的属性子集,有些属于相同的名称,有些则没有。
在搜索时,我总是希望找到特定类型的节点,而不是跨所有节点。
我可以看到这个组织的三种方式:
每种类型一个指标,性能自然映射到索引字段:指数“富”,
'id'='1234'
。一个单一的全局索引,每个字段映射到一个属性名称,以区分该类型或者将其包含为值的一部分(
'id'='foo:1234'
),或者在返回节点后检查它们(我预计副本非常罕见)。单个索引类型是字段名称的一部分:
'foo.id'='1234'
。
一旦创建,数据库是只读的。
在便利性,大小/缓存效率或性能方面,对其中之一是否有任何好处?
据我所知,对于第一个选项,neo4j会为每种类型创建一个单独的物理索引,这看起来并不理想。第三,我最终lucene文档只有一小部分的字段,不知道这是否影响任何东西。
为每种类型分别编制索引似乎更方便也更快捷,因为索引的整体大小会更小。但我可能会错过一些东西。 – biziclop 2012-03-26 21:31:54
@biziclop:它实际上对我来说似乎是最不方便的,因为我必须管理打开/关闭单个索引。我的理解是整体规模也会更大(请参阅jpountz的答案)。 – Dmitri 2012-03-26 21:50:37
@Dimitri好吧,显然整体规模会更大,问题是:搜索所有类型的时间均匀分布?或者某些类型的搜索次数比其他类型的次数多?无论哪种方式,我会做的是实施我觉得最方便的解决方案,看看它是否表现良好。如果是这样,你有你的赢家。 – biziclop 2012-03-26 21:54:49