簡體   English   中英

ArangoDB批處理模式不適用於Java驅動程序

[英]ArangoDB batch mode doesn't work with Java Driver

我正在使用Spring Batch評估ArangoDB。

我試圖插入一些數據,並且在沒有批處理模式的情況下,它可以按預期工作。

但是,如果啟用了批處理模式,則程序的執行將掛起。

我正在使用arango 2.3.3com.arangodb:arangodb-java-driver:[2.2-SNAPSHOT,2.2]

    arangoDriver.startBatchMode();

    for(Account acc : items){
        acc.getRecordHash();
        acc.getIdHash();
        arangoDriver.createDocument("AccountCollection", acc);
    }

    arangoDriver.executeBatch();

有什么想法我做錯了嗎?

我試圖重現您的嘗試,首先是否存在“ AccountCollection”集合? 如果不是這樣,您將在批處理結果中得到一個錯誤,但程序仍不應掛起。 我創建了一個單元測試:

@Test
  public void test_StartCancelExecuteBatchMode() throws ArangoException {

    driver.startBatchMode();

    ArrayList<Account> items = new ArrayList<Account>();
    items.add(new Account());
    items.add(new Account());
    items.add(new Account());
    items.add(new Account());

    for(Account acc : items){
      acc.getRecordHash();
      acc.getIdHash();
      driver.createDocument("AccountCollection", acc, true, false);
    }

    driver.executeBatch();

  }

這可以完美地工作並返回:

EOB 16:47:01.862 [main]調試com.arangodb.http.HttpManager-[RES] http-POST:statusCode = 200 16:47:01.862 [main]調試com.arangodb.http.HttpManager-[RES] http- POST:文本=-dlmtrMLTPRT內容類型:application / x-arango-batchpart內容ID:request1

HTTP / 1.1 202接受的位置:/ _db / unitTestDatabase / _api / document / AccountCollection / 48033214501內容類型:application / json; charset = utf-8 Etag:“ 48033214501”內容長度:95

{“錯誤”:false,“ _ id”:“ AccountCollection / 48033214501”,“ _ rev”:“ 48033214501”,“ _ key”:“ 48033214501”} --dlmtrMLTPRT內容類型:application / x-arango-batchpart內容ID :request2

HTTP / 1.1 202接受的位置:/ _db / unitTestDatabase / _api / document / AccountCollection / 48033411109內容類型:application / json; charset = utf-8 Etag:“ 48033411109”內容長度:95

{“錯誤”:false,“ _ id”:“ AccountCollection / 48033411109”,“ _ rev”:“ 48033411109”,“ _ key”:“ 48033411109”} --dlmtrMLTPRT內容類型:application / x-arango-batchpart內容ID :request3

HTTP / 1.1 202接受的位置:/ _db / unitTestDatabase / _api / document / AccountCollection / 48033607717內容類型:application / json; charset = utf-8 Etag:“ 48033607717”內容長度:95

{“錯誤”:false,“ _ id”:“ AccountCollection / 48033607717”,“ _ rev”:“ 48033607717”,“ _ key”:“ 48033607717”} --dlmtrMLTPRT內容類型:application / x-arango-batchpart內容ID :request4

HTTP / 1.1 202接受的位置:/ _db / unitTestDatabase / _api / document / AccountCollection / 48033804325內容類型:application / json; charset = utf-8 Etag:“ 48033804325”內容長度:95

{“錯誤”:false,“ _ id”:“ AccountCollection / 48033804325”,“ _ rev”:“ 48033804325”,“ _ key”:“ 48033804325”} --dlmtrMLTPRT--

但是,即使我創建了故意的錯誤,該應用程序也永遠不會“掛起”。 弗蘭克剛剛給我發送了您的源代碼,我來研究一下。 您可以嘗試找出程序掛在哪里嗎? 是否完全達到“ executeBatch”?

我已經使用您的代碼導入了1.6 Mio文檔,並且一切正常。 我想可能有必要在導入過程中監視您的系統資源,如果發生任何異常情況,請立即聯系我們。 一般來說,使用java api進行一次性批量導入似乎不是最佳實踐。 我建議使用arangoimp將數據直接導入數據庫,這會更快。 它記錄在這里

您需要增加打開文件描述符的數量。 Mac有一個非常低的限制(256)。 ArangoDB將數據存儲在一定塊大小的數據文件中。 對於大型數據集,需要更多文件(有些fd已經用於通訊和其他東西)。

當ArangoDB文件描述符不足時,它既不能擴展數據集也不能回答新問題。 因此,導入過程將掛起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM