2011-06-29 29 views
1

說我有實體存儲。自動取款機可以將它們視爲斑點。我希望實體存儲在一個集羣上。實體的鍵/ ID是一個(x,y)整數座標。所以它們基本上位於二維網格中。更新任何實體需要鎖定它的4個鄰居。既然我想要冗餘,我認爲最好的辦法是使用冗餘來確保鄰居總是可用的。這裏是分佈可能是什麼樣子:是否有一個集羣數據庫允許將數據沿兩個維度分組?

1 2 3 4 5 6 
1 [F][F][E][E][G][G] 
2 [F][F][E][E][G][G] 
3 [D][D][A][A][B][B] 
4 [D][D][A][A][B][B] 
5 [H][H][C][C][I][I] 
6 [H][H][C][C][I][I] 

如果A,B,C,d,E,F,G,H,I是服務器,那麼A擁有(3,3)的實體,它需要知道屬於其他服務器的(2,3)和(3,2)。以4個塊爲單位排列,這總是會使兩側屬於其他服務器。使用三重冗餘,我想強制所有鄰居的本地副本。這實際上會使我具有線性可擴展性。

是否有一個數據庫允許我定義分片/複製密鑰,以便我可以指定這樣的分佈,或者是否存在將x和y組合成可用於實現此目的的單個值的方法?

我所追求的是低延遲和冗餘,而不是節省驅動器空間。我的實體有一個「參考位置」屬性;事務只能訪問鄰居,但對一個實體使用相同的密鑰,並且它的鄰居會導致每個人都擁有相同的密鑰。

回答

1

據我所知,重複BLOB數據可能是昂貴的存儲方式,我們希望限制冗餘。分解數據的好處是,以非標準化的方式,您可以大大加快搜索功能和性能。

這只是一個想法,但也許你可以通過,而不是創建三個表處理這個以標準化的方式:

座標 - 列(ID),柱(XCOR),柱(YCOR)

數據 - 柱 - (ID),柱(?校驗),

CoordinateData - 柱(CoordinateID),柱(數據ID)

用C oordinateData作爲映射表。這通常不適用於索引或搜索,但如果您存儲了校驗和字符串,則可以使用其他介質來存儲和查找原始數據。

就像我剛纔說的一個想法。

+0

謝謝你的回覆。不幸的是,你不明白爲什麼我想用這種方式分發我的數據;沒有解釋是我的錯。我將把我的解釋作爲一個問題編輯。 –

相關問題