2011-05-10 53 views
0

提前對我的英語感到抱歉。用Cassandra插入表演

我是Cassandra和他的數據模型的初學者。我試圖在本地一個節點上的cassandra數據庫中插入一百萬行。每行有10列,我只在一個列族中插入這些列。

使用一個線程,該操作需要大約3分鐘。但我想用200萬行做相同的操作,並保持良好的時間。然後我用2個線程嘗試插入2百萬行,預計在3-4分鐘內得到類似的結果。但我得到7分鐘的結果......第一個結果的兩倍。當我查看不同的論壇時,建議使用多線程來提高性能。 這就是爲什麼我問這個問題:使用多線程將數據插入本地節點(客戶機和服務器在同一臺計算機中)是否有用,只有一個列族?

一些信息: - 我用pycassa - 我已經分居commitlog劇目和數據劇目上型動物磁盤 - 我用批量插入每個線程 - 一致性等級:ONE - 複製的因素:1

+0

你有沒有找到這個解決方案?我有類似的問題,我找不到任何解決方案。 – bwight 2013-03-25 16:40:33

回答

0

它是可能你打python GIL但更可能你做錯了什麼。

例如,將2M行放在一個批次中就會造成錯誤。

+0

感謝您的回答。我不會在一批中放置2M行。每個線程連接到數據庫,並插入1M個行,隊列配置的queue_size爲1000. – 2011-05-10 20:44:20

+0

您應該從contrib/stress開始,因爲那樣您就知道負載生成部分不是問題。 – jbellis 2011-05-17 21:40:37

0

嘗試在多個進程中運行多個客戶端,而不是線程。

然後嘗試使用不同的插入尺寸。

1M插入3分鐘大約5500插入/秒,這是一個單一的本地客戶端相當不錯。在多核計算機上,如果您使用多個客戶端,可能會插入小批量行或單個行,您應該可以獲得此數量的多倍。

+0

謝謝你的幫助。我只是改變我的程序與多個進程(一個分支),但沒有改善。我在想這會是我的程序太複雜了:它讀取csv文件,批量插入數據,然後將它們發送到數據庫。我使用的時間命令和用戶時間大約2分鐘...對於單個本地客戶端(有4個核心),它可能很大程度上安排我的程序和數據庫在同一時間 – 2011-05-11 08:30:47

0

你可能會考慮Redis。其單節點吞吐量應該更快。它與Cassandra不同,所以它是否是一個合適的選項取決於你的用例。

+0

是的我聽說過Redis,但它是不適合我的數據模型,不幸... – 2011-05-22 19:01:45

0

因爲插入了兩倍的數據,所花費的時間增加了一倍。你有可能是I/O綁定?