2013-01-04 29 views
3

例如,如果我處理了很多事務[時間戳(鍵),值,交易者,..]我想爲了負載平衡而進行隨機分區。我可以按行鍵排序並隨機分區嗎?

但是爲了查詢起見,我希望這些事務按每個節點上的時間戳排序,以便在最近5分鐘(或某個其他時間段)內完成所有事務並使用總計MapReduce的。

爲什麼在文件中卡桑德拉排序鍵隨機如果我使用隨機分區?

Q1:對此有一個解決方法嗎?我可以使用索引,但它並不理想。

Q2。出於好奇,我想知道爲什麼在與分區策略相關的節點中進行關鍵排序?

回答

1

節點是卡桑德拉是環的形式,在每個環節點負責鍵範圍(數據集)。這個想法是,在環中所有節點上平均分配數據,另外獨立執行每個寫操作 - 這樣我們就不需要跟蹤上次更新,以平衡環中的數據。

隨機分區器使用Consistent Hashing以存儲在隨機節點排按鍵,爲了找到他們以後。它基本上生成真正的行密鑰(這是BigInteger)的散列,並且它找到負責此散列的節點(它在此節點的範圍內)。

例如,我們已經在環(I將使用以少數保持簡單)4個節點:

  • 節點1 = initial_token:0
  • 節點2 = initial_token:100
  • 節點3 = initial_token:200
  • 節點4 = initial_token:300

行密鑰 「VALUE1」 的散列給出23,所以將存儲在節點1個

哈希行鍵「值2」中給出了123,所以它會被存儲在節點2

爲了解決你的問題,你需要寫手動索引和二級索引可能是不完美的想法 - 它有一定的侷限性(低肉慾)

+0

我使用散列分區進行負載平衡,但在你的例子,如果我想插入行鍵「值3」與哈希119將在節點2「值2」之前插入,我想它在「value2」之後的節點2上。爲什麼密鑰無法在單個節點上排序?沒有相互獨立的排序策略和分區策略的原因是什麼?你能詳細說明一下嗎?謝謝。 – user1944408

+0

我有一個狡猾的解決方法,但它非常糟糕,並且添加其他節點並不容易。我做的是這樣的:對於5個節點,我的密鑰將是MD5(時間戳)模塊5:時間戳。第一個字節用於分區,因此我在每個節點上都有負載平衡和數據排序。不幸的是很難添加額外的節點。 – user1944408

+0

好吧...卡桑德拉選擇了簡單高效的解決方案 - 這就是我不認爲有更多的東西在這個想法背後。您可以通過創建寬行來在單個節點中排序鍵 - 在這種情況下,列名是排序的。如您已經看到的,您的帶時間戳的解決方案不會擴展。我會重新設計你的模型 - 創建反向索引並使用非規範化 - 這真的不是很難;) –