Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance OrientDB中的嵌入式列表查询性能_Performance_Search_Indexing_Orientdb_Nosql - Fatal编程技术网

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

Performance OrientDB中的嵌入式列表查询性能,performance,search,indexing,orientdb,nosql,Performance,Search,Indexing,Orientdb,Nosql,也许这是关于OrientDB的一个非常简单的问题,因为我只使用了几天 我的问题是,我在OrientDB中有大约一百万个文档(我们称之为ClassA),每个文档都有一个字段(我们称之为fieldA) fieldA的类型为嵌入式列表,嵌入式列表中的项为字符串 因此,OrientDB中的数据如下所示: [ { fieldA: ['a','b','c'] }, { fieldA: ['c','d','e'] }, ] select fro

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

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

fieldA的类型为嵌入式列表,嵌入式列表中的项为字符串

因此,OrientDB中的数据如下所示:

[
    {
        fieldA: ['a','b','c']
    },
    {
        fieldA: ['c','d','e']
    },
]
select from ClassA where 'c' in fieldA
create index ClassA.fieldA not unique
我要做的是按fieldA查询文档

所以查询是这样的:

[
    {
        fieldA: ['a','b','c']
    },
    {
        fieldA: ['c','d','e']
    },
]
select from ClassA where 'c' in fieldA
create index ClassA.fieldA not unique
因为数据库中有数百万条记录,所以我为fieldA创建了一个索引,创建索引的脚本如下:

[
    {
        fieldA: ['a','b','c']
    },
    {
        fieldA: ['c','d','e']
    },
]
select from ClassA where 'c' in fieldA
create index ClassA.fieldA not unique
但当我解释select查询时,我得到了以下结果:

{
    "@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 index有深入的了解吗?

MySQL会在查询之后通过分页返回光标,但是当您获取所有记录时,结果可能会有所不同。请试着做一个测试

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

或者尝试获取所有记录。

不,这不是那么容易。数据库在fieldA中只有一个“c”对象。因此OrientDB profiler结果显示它浏览了959211记录:索引没有被正确使用。是的,我同意你的观点,所以这个问题就是关于这个,我是否使用了错误的索引?如果我错了,如何使用索引来快速查询?找到解决方案了吗?没有,暂时放弃OrientDB。MySQL现在似乎对我来说是一个更好的数据库D