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