2010-09-23 28 views
0

有用戶數據庫。
假設我想支持一些用戶可以擁有多個OpenID並使用它們登錄,並假設我想將用戶分區到多個數據庫中。分區用戶 - 多個OpenID

有沒有解決方案? StackOverflow支持每個用戶使用兩個OpenID,他們將如何執行此操作?

如果用戶只能使用一個OpenID,則會有多種分區選擇。在多個OpenID中,我有兩個具有1-n關係的表。

在這種情況下是否有一些算法來進行高效的分區?

更新 正如中午絲綢提到的,問題不是特定於OpenID。我只是對分區感興趣,我提到了OpenID,因爲在這種情況下,它可能與創建映射函數有關。

試圖將其作爲一個通用的問題。
我有兩個表A和B,關係n爲1.是否有一些規則/建議如何在這種情況下進行分區,以便完整的信息位於一個數據庫中?

如果
A1是關係到B1
A2是關係到B1
A3是關係到B1

A4是與B2
A5是關係到B2

如何把A1 -A3和B1在一個數據庫中,A4-A5和B2在另一個數據庫中?

回答

0

OpenID實際上只是用戶的唯一ID。所以,很明顯,您可以將每個「用戶」中的多個關聯起來。因此,如果你想讓系統中的用戶與一個OpenID有多個連接表(比如n增加),顯然鏈接表是有意義的(即tblUser - > tblUserOpenIDs或類似的方法)。

+0

主要問題是分區。如果我開始按照OpenID的第一個字母進行分割,它們可以位於不同的數據庫中。我會在哪個數據庫中放置用戶信息? – 2010-09-23 14:22:02

+0

因此,重新構思您的問題並刪除所有對OpenID的引用,您會發現問題很普遍。你想分割一些東西?找到一種算法,將數據均勻分佈在一定範圍內,並通過x%numServ分配服務器。 – 2010-09-23 14:32:28

1

如果你把它放在Azure表(AZT)中,我實際上會使用兩個表。正如你將要在OpenId登錄時查找用戶一樣,我將擁有一個UserOpenId表,其中分區鍵是其整個OpenId,行鍵是空白或其他常量,並且它具有實際的用戶ID在另一個領域。然後將用戶標識作爲主用戶表中的分區鍵(再次使用行鍵的常量)。這將使您查找該用戶的最快方式。確保在查詢中包含PartitionKey和RowKey。

使用AZT,您無需擔心分區大小均勻,您只需要擔心如何從中獲取數據。如果您只是一次只能拿出一件特定物品,請將分區鍵設爲您要查找的物品。如果您要將這些項目分組出來,請使用分區鍵,您將要查看的項目以及行鍵是唯一的ID。

0

「如何將A1-A3和B1放在一個數據庫中,A4-A5和B2放在另一個數據庫中?」

在現實生活中實現這一工作的一種方法是放棄自動參照完整性檢查,並將兩個表視爲兩個完全獨立的實體。這樣你可以像Noon Silk建議的那樣進行分區。沒有必要將兩者都放在同一個數據庫中(儘管如此),特別是因爲兩個表都是不可變的。