本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立有效率的多執行緒 Gremlin 寫入
使用 Gremlin 以多執行緒的方式將資料載入 Neptune,有幾項準則。
如有可能,請提供每個執行緒一組頂點或邊緣,以插入或修改不衝突的項目。例如,執行緒 1 的地址 ID 範圍為 1–50,000,執行緒 2 地址 ID 範圍為 50,001–100,000,以此類推。這可減少出現 ConcurrentModificationException
的機率。為安全起見,所有寫入請圍以 try/catch
區塊。若任何一個項目失敗,您便可以在短暫的延遲後重試它們。
以介於 50 和 100 (頂點或邊緣) 間的批次大小批次寫入,通常效果很好。若您要為每個頂點新增許多屬性,接近 50 的數字可能比接近 100 的數字更好。這很值得進行一些實驗。因此針對批次寫入,您可以使用如下的內容:
g.addV(‘test’).property(id,’1’).as(‘a’). addV(‘test’).property(id,’2’). addE(‘friend’).to(‘a’).
接著會在每一個批次操作中重複這段過程。
使用批次的效率,遠比在每一次 Gremlin 與伺服器的來回行程中新增一個頂點或邊緣高。
如果您使用的是 Gemlin 語言變體 (GLV) 用戶端,您可以先建立遍歷以程式設計方式建立批次。然後,為它新增內容,最後再對它反覆運算,例如:
t.addV(‘test’).property(id,’1’).as(‘a’) t.addV(‘test’).property(id,’2’) t.addE(‘friend’).to(‘a’) t.iterate()
如果可能,最好使用 Gremlin 語言變體用戶端。但是,您可以串連字串來建立批次,用將查詢提交為文字字串的用戶端執行類似的作業。
如果您使用的是 Gemlin Client 程式庫之一,而不是基本HTTP的查詢,則執行緒應共用相同的用戶端、叢集或連線集區。您可能需要調校設定,來盡可能取得最佳的輸送量,像是 Gremlin 用戶端所使用的連線集區大小及工作者執行緒數量等設定。