2015-10-29 42 views
0

我是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,但實際上花了更長的時間。

回答

1

我們自己解決了這個問題。留下這個以防萬一它可能幫助某人:-)。我們在後端進行了許多內部改進(仍然使用原始doc API)並切換到OrientDB 2.0.15之後,已經達到了30秒,並且我們找到了自己切換提前寫入日誌的方法。這爲我們工作(db是我們的ODatabaseDocumentTx實例):

private void reopenWithWALSetTo(final boolean useWAL) { 
    db.getStorage().close(true, false); 
    db.close(); 
    OGlobalConfiguration.USE_WAL.setValue(useWAL); 
    db = new ODatabaseDocumentTx(dbURL); 
    db.open("admin", "admin"); 
} 

我傻,以爲我只好先關閉數據庫,然後儲存,但事實證明,情況並非如此:-) 。有必要使用ODatabaseDocumentTx#close方法的兩個arg版本,因爲no-arg版本基本上對通過plocal:// URL使用的OAbstractPaginatedStorage實現沒有任何作用。

+0

我們可以把它放在更高層次的API中。打開一個新的問題:https://github.com/orientechnologies/orientdb/issues/5254 – Lvca

相關問題