在我的项目中,我有一个相当大的前缀树,可能包含数百万个节点(我的开发实例中约250K节点),在OrientDB中管理(指向我图中的其他顶点)。
前缀树的节点由令牌顶点类型表示。每个令牌都有一个'密钥'属性并由一个孩子与孩子的顶点连接。边缘类型。所以,像#" hello world"将表示为:
root -child-> "hello" -child-> "world"
目前,我在Token.key上有一个NOTUNIQUE_HASH_INDEX,我正在查询这样的数据结构:
SELECT EXPAND(OUT('child')[key=:k]) FROM :p
其中k是我要查找的子键,p是父节点的RID。
通常,性能非常好,但我正在寻找有关改进此用例的查询,索引或两者的想法。特别是,从具有许多子节点的根节点开始的查询比其他连接较少的节点要长得多。
有什么建议吗?提前谢谢!
答案 0 :(得分:0)
OrientDB团队的Luigi Dell'Aquila为OrientDB Google Group提供了一个很好的答案。总而言之,以下查询(由Luigi建议)显着提高了性能。
SELECT FROM Token where key = :k AND in('Child') contains :p
我刚刚运行了一次真实的测试,查询时间减少了97%!有关详细信息,请参阅https://groups.google.com/forum/#!topic/orient-database/mUkz6Z7hSwk。