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

时间:2016-03-02 16:07:02

标签: orientdb

我使用OrientDB绘制社交网络图。顶点由user_id唯一索引。插入新顶点时,我可能会遇到潜在的重复。例如,user_id(1)有朋友:user_id(0) ... user_id(5) ... user_id(n)。同一个用户1也可能有相交的关注者,例如,user_id(5)可能同时属于friendsfollowers

因此,我插入root用户顶点,然后获取所有ID的朋友以及ID的关注者,然后将其插入批处理操作中。

我的问题是,在插入顶点时,是否存在一种规范方法来插入会占重复项的新记录?

鉴于我的应用程序的结构,我可以想到几种方法:

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

create vertex User content {user_node}

在每次插入之前,我会针对Redis数据库中包含的二级索引检查user_id。我使用@rid字段来创建边缘。 Redis商店包含一个包含字段user_id和值@rid的哈希索引,因此我可以通过这种方式填充@rid

这样可以保持OrientDB访问权限。此外,访问Redis可能比访问OrientDB快得多,获取哈希字段值的时间复杂度为O(1);因此,我想,即使我每次操作都要查询两个数据库,我仍然会提前(也许)。但是,如果OrientDB和二级索引之间存在分歧,则重复记录会引发ORecordDuplicatedException。我可以在应用程序级别捕获此异常,但后来我遇到了@rid个问题。我正在使用@rid字段,因为根据OrientDB文档,这是访问记录的最快方式。

2)每次插入更新/ Upsert:

update User content {user_node} upsert where user_id = 1

我认为,这将在数据库端保留所有错误捕获和重复检测。来自Neo4j,MERGE这样的操作比CREATE贵一点;这同样适用于OrientDB吗?

我还缺少其他任何插入方法吗?这里有最好的解决方案吗?谢谢!

0 个答案:

没有答案