我是Hawk model indexing工具的開發人員之一。我們的工具將XMI模型索引到圖表中以加快後續查詢速度,並且需要在「批量插入」和「事務更新」模式之間來回切換。當我們第一次注意到一個目錄中有一個新文件時,使用「批量插入」,從那時起我們使用「事務更新」模式來保持其圖形同步。切換同一虛擬機內的WAL使用情況?
我們最近添加的OrientDB 2.1.4 backend使用OrientGraphFactory中的getTx()/ getNoTx()方法來獲取合適的OrientGraph/OrientGraphNoTx實例。但是,與Neo4j相比,我們的吞吐量並不是很好。索引set0.xmi將Orientation放置在Linux ramdisk中的時間爲90s,而在相同條件下(machine + OS + JDK),我們的Neo4j後端需要22s。我們使用這些額外的設置,以儘量減少時間:
- 增加WAL緩存大小爲10000
- 頁面刷新
- 僅保存髒對象
- 使用大量的插入意圖上禁用同步
- 禁用事務日誌
- 禁用MVCC
- 禁用驗證
- 儘可能使用輕質邊緣
我們曾經想過在進入「批量插入」模式時禁用WAL,但似乎並沒有簡單的方法來打開和關閉。它似乎只能在程序啓動時設置一次,就是這樣。我們試圖明確關閉底層存儲,以便在重新打開存儲時再次讀取USE_WAL標誌,但這隻會導致NullPointerException和其他隨機錯誤。
任何關於如何切換WAL或提高性能的指針都將不勝感激。
更新:我們已經切換到使用原始文檔API並自己標記髒節點/邊,現在我們打了55秒,但WAL問題仍然存在。也試過2.2.0-beta,但實際上花了更長的時間。
我們可以把它放在更高層次的API中。打開一個新的問題:https://github.com/orientechnologies/orientdb/issues/5254 – Lvca