OrientDB中的嵌入式列表查询性能

时间:2014-04-06 16:10:30

标签: performance search indexing orientdb nosql

也许这是关于OrientDB的一个非常简单的问题,因为我只使用了它几天。

我的问题是,我在OrientDB中有大约一百万个文档(我们称之为ClassA),每个文档都有一个字段(我们称之为fieldA)。

fieldA的类型是嵌入式列表,嵌入式列表中的项目是字符串。

因此,OrientDB中的数据是这样的:

[
    {
        fieldA: ['a','b','c']
    },
    {
        fieldA: ['c','d','e']
    },
]

我想要做的是通过fieldA查询文档。

所以查询是这样的:

select from ClassA where 'c' in fieldA

因为,数据库中有数百万条记录,所以我为fieldA创建了一个索引,创建索引的脚本是这样的:

create index ClassA.fieldA not unique

但是当我解释选择查询时,我得到了这个:

{
    "@type":"d","@version":0,
     "involvedIndexes":["ClassA.fieldA"],
     "current":"#11:960477",
     "fetchingFromTargetElapsed":160596,
     "documentReads":959211,
     "documentAnalyzedCompatibleClass":959211,
     "recordReads":959211,
     "elapsed":160596.25,
     "resultType":"collection",
     "resultSize":1,
     "@fieldTypes":"involvedIndexes=e,fetchingFromTargetElapsed=l,documentReads=l,documentAnalyzedCompatibleClass=l,recordReads=l,elapsed=f"
 }

正如您在结果中看到的那样,即使它使用了索引[“ClassA.fieldA”],但对于959211条记录,查询的最后时间为160596毫秒,大约为16秒。那太慢了(相比MySQL,对于mysql来说,记录甚至更大,因为MySQL不支持嵌入式列表,所以mysql的存储是针对每个fieldA,在MySQL中有记录,而且查询非常快,只花费0.015秒)。

我做错了吗?或者,OrientDB中嵌入式列表查询的性能是bat?

有人对OrientDB有深入的了解吗?OrientDB索引对此有何帮助?

1 个答案:

答案 0 :(得分:0)

MySQL在查询之后通过对它们进行分页来返回光标,但是当您获取所有记录时,结果可能会有所不同。请尝试做

select count(*) from ClassA where 'c' in fieldA

在OrientDB和MySQL上,或尝试获取所有记录。