Orientdb 是否有一种规范的方法来处理插入可能包含重复项的记录?

Orientdb 是否有一种规范的方法来处理插入可能包含重复项的记录?,orientdb,Orientdb,我正在使用OrientDB绘制社交网络图。顶点由user\u id唯一索引。插入新顶点时,可能会遇到潜在的重复。例如,用户id(1)有朋友:用户id(0)。用户id(5)。用户id(n)。同一个用户1,也可能有相互交叉的追随者,例如,user\u id(5)可能同时在朋友和追随者的集合中 因此,我插入根用户顶点,然后获取朋友的所有ID以及追随者的ID,然后在批处理操作中插入这些ID 我的问题是,在插入顶点时,是否有一种规范的方法来插入新记录,以解释重复的记录 考虑到我的应用程序的结构,我可以想出

我正在使用OrientDB绘制社交网络图。顶点由
user\u id
唯一索引。插入新顶点时,可能会遇到潜在的重复。例如,
用户id(1)
有朋友:
用户id(0)
用户id(5)
用户id(n)
。同一个用户
1
,也可能有相互交叉的追随者,例如,
user\u id(5)
可能同时在
朋友和
追随者的集合中

因此,我插入根用户顶点,然后获取朋友的所有ID以及追随者的ID,然后在批处理操作中插入这些ID

我的问题是,在插入顶点时,是否有一种规范的方法来插入新记录,以解释重复的记录

考虑到我的应用程序的结构,我可以想出两种方法:

1) 使用以下内容创建每个新用户顶点:

create vertex User content {user_node}
在每次插入之前,我会对照Redis数据库中包含的二级索引检查
用户id
。我使用
@rid
字段来创建边。Redis存储包含一个散列索引,其中包含字段
user\u id
和值
@rid
,因此我可以通过这种方式填充
@rid

这样做的好处是降低了OrientDB访问权限。此外,访问Redis可能比访问OrientDB快很多,获取散列字段值的时间复杂度为O(1);因此,我认为,即使我为每个操作查询两个数据库,我仍然会领先(也许)。但是,如果OrientDB和二级索引之间存在差异,则重复记录将引发
或RecordDuplicatedException
。我可以在应用程序级别捕获此异常,但是我有
@rid
问题。我使用的是
@rid
字段,因为根据OrientDB文档,这是访问记录的最快方法

2) 每次插入时更新/向上插入:

update User content {user_node} upsert where user_id = 1
我认为,这将在数据库端保留所有错误捕获和重复检测。来自Neo4j,
MERGE
这样的操作比
CREATE
要贵一点;这同样适用于OrientDB吗


是否有我缺少的其他插入方法?这里有最好的解决方案吗?谢谢

UPSERT有任何限制(请参阅文档UPSERT子句)。显然,upsert应该比create更昂贵。