在 OrientDB 中批量插入
Batch insert in OrientDB
我有大约 10,000 条记录(大约),我想在 Orient DB 中进行批量插入。
我的问题是一些记录已经存在于数据库中(我根据一些独特的字段决定)。所以我的批处理操作应该更新现有记录并为不存在的记录创建新记录。对于给定的批处理文件,相同的记录可能会以不同的值出现两次(唯一字段除外),这样的记录也应该得到更新。
示例:
description firstName lastName title organization currentStage inCurrentStageAsOf serviceLevelMonitored
description1 John Doe CEO organization1 Existing 1012001 Availability
description2 Jane Doe CIO organization2 End-of-Life 2022002 Performance
description3 Jane Doe CIO organization2 End-of-Life 2022002 Performance
description2 Jane Joe CIO organization2 End-of-Life 2022002 Performance
description4 Jane Doe CIO organization2 End-of-Life 2022002 Performance
description5 Jane Doe CIO organization2 End-of-Life 2022002 Performance
description6 Jane Doe CIO organization2 End-of-Life 2022002 Performance
description7 Jane Doe CIO organization2 End-of-Life 2022002 Performance
description8 Jane Doe CIO organization2 End-of-Life 2022002 Performance
description9 Jane Doe CIO organization2 End-of-Life 2022002 Performance
description10 Jane Doe CIO organization2 End-of-Life 2022002 Performance
description11 Jane Doe CIO organization2 End-of-Life 2022002 Performance
description2 Jane Doe organization2 End-of-Life 2022002 Performance
对于上述操作,如果我的唯一字段是描述和姓氏。然后我在 Rec2 和 Rec13 的文件中有重复的记录,但是 Rec4 不是重复的。也有可能一些记录已经存在于数据库中。
如果我的文件很大,我应该如何应用批处理?
我现在能想到的是将异步线程发送到 DB 以查找 Rec 是否存在,然后更新现有记录的 Id 并将整个记录分成两部分(要更新和要创建的记录)以及用于创建和更新的应用批处理分别地。如果有什么东西可以一次性完成,只是在寻求建议。
谢谢。
您可以使用 UPDATE UPSERT
来完成。
如 manual 中所述,您需要对感兴趣的属性使用 UNIQUE 索引,因此在您的情况下
CREATE INDEX yourClass.desc_lastName ON yourClass (description,lastName) UNIQUE_HASH_INDEX
然后您可以更新使用(例如,对于您的第一条记录):
UPDATE yourClass set description="description1",firstName="John",lastName="Doe",title="",organization="organization1",currentStage="Existing" UPSERT WHERE description="description1" AND lastName="Doe"
我有大约 10,000 条记录(大约),我想在 Orient DB 中进行批量插入。 我的问题是一些记录已经存在于数据库中(我根据一些独特的字段决定)。所以我的批处理操作应该更新现有记录并为不存在的记录创建新记录。对于给定的批处理文件,相同的记录可能会以不同的值出现两次(唯一字段除外),这样的记录也应该得到更新。
示例:
description firstName lastName title organization currentStage inCurrentStageAsOf serviceLevelMonitored description1 John Doe CEO organization1 Existing 1012001 Availability description2 Jane Doe CIO organization2 End-of-Life 2022002 Performance description3 Jane Doe CIO organization2 End-of-Life 2022002 Performance description2 Jane Joe CIO organization2 End-of-Life 2022002 Performance description4 Jane Doe CIO organization2 End-of-Life 2022002 Performance description5 Jane Doe CIO organization2 End-of-Life 2022002 Performance description6 Jane Doe CIO organization2 End-of-Life 2022002 Performance description7 Jane Doe CIO organization2 End-of-Life 2022002 Performance description8 Jane Doe CIO organization2 End-of-Life 2022002 Performance description9 Jane Doe CIO organization2 End-of-Life 2022002 Performance description10 Jane Doe CIO organization2 End-of-Life 2022002 Performance description11 Jane Doe CIO organization2 End-of-Life 2022002 Performance description2 Jane Doe organization2 End-of-Life 2022002 Performance
对于上述操作,如果我的唯一字段是描述和姓氏。然后我在 Rec2 和 Rec13 的文件中有重复的记录,但是 Rec4 不是重复的。也有可能一些记录已经存在于数据库中。
如果我的文件很大,我应该如何应用批处理? 我现在能想到的是将异步线程发送到 DB 以查找 Rec 是否存在,然后更新现有记录的 Id 并将整个记录分成两部分(要更新和要创建的记录)以及用于创建和更新的应用批处理分别地。如果有什么东西可以一次性完成,只是在寻求建议。 谢谢。
您可以使用 UPDATE UPSERT
来完成。
如 manual 中所述,您需要对感兴趣的属性使用 UNIQUE 索引,因此在您的情况下
CREATE INDEX yourClass.desc_lastName ON yourClass (description,lastName) UNIQUE_HASH_INDEX
然后您可以更新使用(例如,对于您的第一条记录):
UPDATE yourClass set description="description1",firstName="John",lastName="Doe",title="",organization="organization1",currentStage="Existing" UPSERT WHERE description="description1" AND lastName="Doe"