首页 > 解决方案 > Orientdb 在插入重复检查时性能非常慢

问题描述

我正在使用 REST API 向 OrientDB 发送一批 SQL 命令。每批包含大约 6000 个顶点和 13200 条边。我正在使用 csv 创建顶点和边,1 批是通过解析 csv 中的 100 行生成的所有查询。我在插入之前检查重复项,如下所示:

顶点

UPDATE vertex SET property1 = "property1", property2 = "property2" UPSERT WHERE property1 = "property1";

边缘(使用此方法,因为边缘不支持 UPSERT)

LET $1 = SELECT expand(bothE("edge1")) FROM vertex1 WHERE property1 = "property1";
LET $2 = SELECT expand(bothE("edge1")) FROM vertex2 WHERE property1 = "property1";
LET $3 = SELECT INTERSECT($1, $2);
IF($3.INTERSECT.size() == 0) {
LET $4 = CREATE EDGE edge1 FROM (SELECT FROM vertex1 WHERE property1 = "property1") TO (SELECT FROM vertex2 WHERE property1 = "property1");

第一批大约需要 50 秒,第二批大约需要 250 秒,第三批需要 1000 多秒。我怀疑在以前的记录中搜索重复记录是它减慢速度的原因,但是它的数据量如此之少,我怀疑我的重复检查或服务器配置是罪魁祸首。

有没有更好的方法来检查重复项?我已经更新了我的服务器配置以使用以下内容:

storage.diskCache.bufferSize = 40GB
query.parallelMinimumRecords = 1
storage.useWAL = false

任何建议表示赞赏

标签: javanosqlorientdb

解决方案


推荐阅读