簡體   English   中英

如何在卡桑德拉制作100萬個刀片

[英]how to make 1 million inserts in cassandra

我正在從應用程序中解析成千上萬的csv文件,對於每個解析的行,我都會在Cassandra中插入一個文件。 似乎它運行后停止在2048次插入並拋出BusyConnection錯誤。

對我來說,制作大約一百萬個刀片的最佳方法是什么?

我應該將插入內容作為字符串導出到文件中,然后直接從CQL運行該文件以制作大量插入內容,這樣我實際上就不會通過網絡進行操作嗎?

1百萬個請求-確實不是一個很大的數目,您可以使用COPY FROM命令從cqlsh加載它。 但是您也可以通過Java代碼加載此數據。

根據錯誤消息,您似乎正在使用異步API。 您可以將其用於高性能插入,但是您需要控制同時處理多少個請求(所謂的進行中請求)。

這里有幾個方面:

  1. 從協議版本3開始,每個連接最多可能有32k進行中的請求,而不是默認使用的1024。 可以在創建Cluster對象時對其進行配置
  2. 例如,您需要通過用一些計數器包裝session.executeAsync來控制進行中的請求數量,例如本例 (不是最佳方法,因為它限制了每個會話的總請求數,而不是與單個主機的連接-這將需要更多的邏輯,尤其是圍繞令牌感知的請求)。

我們使用腳本解決了此類問題。

該腳本通過輸入數據並...

  1. 每次都需要從輸入中獲取特定數量的數據。
  2. 等待特定的時間。
  3. 繼續讀取和插入數據。

廣告1.對於我們的配置和數據(最多10列,大多數為數字和短文本),我們發現500到1000行是最佳的。

廣告2.我們將等待時間定義為n * t。 其中n是在腳本的單次運行中處理的行數。 t是時間常數,以毫秒為單位。 t的值在很大程度上取決於您的配置。 然而,對我們而言, t = 70 ms足以使過程順利進行。

暫無
暫無

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

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