在我的项目中,我有一个相当大的前缀树,可能包含数百万个节点(在我的开发实例中大约有25万个节点),在OrientDB中管理(指向我的图中的其他顶点)。
前缀树的节点由令牌顶点类型表示。每个令牌都有一个'key‘属性,并通过一个’子‘边类型连接到它的子顶点。因此,像"hello world“这样的序列将表示为:
root -child-> "hello" -child-> "world"目前,我在Token.key上有一个NOTUNIQUE_HASH_INDEX,我像这样查询数据结构:
SELECT EXPAND(OUT('child')[key=:k]) FROM :p其中k是我要查找的子键,p是父节点的RID。
一般来说,性能是相当好的,但我正在寻找一些想法来改进这个用例的查询、索引或两者。特别是,从具有许多子节点的根节点开始的查询比连接较少的其他节点花费的时间要长得多。
有什么建议吗?提前感谢!
发布于 2016-12-23 23:36:08
OrientDB团队的Luigi Dell‘’Aquila在OrientDB谷歌小组上提供了一个很好的答案。总而言之,下面的查询(由Luigi建议)大大提高了性能。
SELECT FROM Token where key = :k AND in('Child') contains :p我刚刚运行了一个实际的测试,查询时间减少了97%!有关更多详细信息,请参阅https://groups.google.com/forum/#!topic/orient-database/mUkz6Z7hSwk。
https://stackoverflow.com/questions/41290872
复制相似问题