2016-08-08 11 views
0

Ich habe etwa 10.000 Datensätze (ca.), die ich in Orient-DB Batch einfügen möchte. Mein Problem ist, dass ein Teil des Datensatzes bereits in der DB existiert (das entscheide ich anhand einiger eindeutiger Felder). Also sollte meine Batch-Operation den bestehenden Datensatz aktualisieren und den neuen für den nicht existierenden erstellen. Es kann möglich sein, dass für eine gegebene Batch-Datei derselbe Datensatz zweimal mit einem anderen Wert (abgesehen von einem eindeutigen Feld) vorkommen kann. Ein solcher Datensatz sollte ebenfalls aktualisiert werden.Batch-Einfügung in OrientDB

Beispiel:

 
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 

Für den oben beschriebenen Vorgang, wenn meine einzigartigen Felder Beschreibung und nachName sind. Dann habe ich doppelte Datensätze in der Datei mit Rec2 und Rec13, aber Rec4 ist nicht doppelt. Es ist auch möglich, dass ein Teil des Datensatzes bereits in der DB existiert.

Wie soll ich Batch anwenden, wenn meine Datei riesig ist? Was ich jetzt denken kann, ist Fire asyn Thread zu DB zu finden, ob Rec existiert, dann aktualisieren Sie die ID für den bestehenden Datensatz und trennen Sie den ganzen Haufen in zwei (Record zu aktualisieren und zu erstellen) und die Anwendung Batch für erstellen und separat aktualisieren. Ich suche nur Rat, wenn es etwas gibt, was es auf einen Schlag macht. Danke.

+0

Hallo Hast du den 'UPDATE UPSERT' in Betracht gezogen? –

+0

http://orientdb.com/docs/2.1/SQL-Update.html –

Antwort

3

können Sie es mit UPDATE UPSERT tun.

Wie in den manual Sie einen eindeutigen Index für die interessierten Eigenschaften benötigen, so in Ihrem Fall

CREATE INDEX yourClass.desc_lastName ON yourClass (description,lastName) UNIQUE_HASH_INDEX 

dann können Sie (zB für den ersten Datensatz) Update mit:

UPDATE yourClass set description="description1",firstName="John",lastName="Doe",title="",organization="organization1",currentStage="Existing" UPSERT WHERE description="description1" AND lastName="Doe"