2013-10-29 35 views
2

我知道它正在工作,但我想知道這是一個與PartitionKey和RowKey具有相同字符串的好習慣嗎?使用相同的PartitionKey和RowKey

這種場景適用於所有物品都是唯一的單個表格,Customer表格中每行都有關於一個單一客戶的信息。

我的意思是說,例如我會得到這個唯一的客戶ID,我想用它來獲得PartitionKey + RowKey的記錄,所以返回將是快速的和單個項目。

您認爲如何?

回答

15

這一定會讓你的顧客快速查找。 RowKey可以是一個空字符串,因此如果您爲每個客戶都有獨特的分區,您在技術上不必使PartitionKey和Rowkey匹配。

幾件事情要注意這裏:

  • 你放棄了加入客戶批量或批量更新它們。由於只有同一分區中的實體可以批量處理,如果您有單個實體分區方案,則不會有批處理。鑑於你上面列出的,我不認爲這會打擾你。
  • 任何針對partitionKey的範圍查詢(例如1到200之間的所有客戶)最終可能跨越多個分區服務器,這使得查詢效率非常低下。再說一次,如果你只想一個一個地看顧客,而不想分組,你應該沒問題。可能想要考慮一下這種情況,即必須爲系統中的每個客戶添加一個屬性,以及在需要時如何處理該屬性(具有一組已知客戶ID的多線程更新程序可能會很好,但你至少應該考慮一下)。
  • 請儘量避免僅追加模式。這意味着如果您的客戶ID是連續的,那麼當您添加它們時,它們最初將位於相同的分區服務器上。只有當它們中的一部分變熱時,它們纔會被移到另一臺服務器上。最好做一個ID的散列並將其用作PartitionKey,如果你真的開始對它們進行攻擊,這會使它們分散到多個分區服務器中。根據您的負載,您可能實際上看不到這一點。

查看How to get most out of Windows Azure Tables關於選擇分區鍵的文章。你會看到我在這裏所說的大部分內容(我從中學到的地方之一)還有更多。

+0

如果我明白你的觀點是正確的,那麼最好有一個共同的ID(例如GUID)作爲分區鍵,然後行鍵將包含我唯一的客戶ID和在這種情況下,我仍然可以通過partionkey + rowkey獲得客戶,但也可以使用批次? – user2818430

+0

我不會建議只保留一個PartitionKey(例如'Users'),因爲這會破壞整個分區的目的。假設你有100000個用戶,並將PartitionKey設置爲'Users'和RowKey作爲唯一的ID。當您搜索用戶時,表服務將不得不掃描那些100000條記錄來查找匹配的用戶標識。在這種情況下,您最好保留唯一的ID作爲PartitionKey。 HTH。 –

+0

不,我只是說你應該知道配料只能用於同一分區的實體。正如Gaurav指出,如果您將所有內容放在同一個分區中,您將對系統的可擴展性產生嚴重影響。只要您始終知道分區密鑰,您爲每個分區密鑰提供單個客戶的建議就是可行的。 – MikeWo

1

使用一致的字符串ID「0」,因爲RowKey與雙重PK具有相同的唯一性結果。 PK + 0 = PK + PK。

一個實用的解決方案正在考慮最常見的查詢過程。您可以使用PartitionKey中的zip/pocode - 然後使用RowKey中的客戶GUID。如果您的客戶羣均勻分佈在全國各地。 PartitionKey不需要PrimaryKey ...