2011-07-30 61 views
0

我試圖在學習Symfony和Doctrine時模擬一個簡單的實驗性應用。MongoDB基於權限的建模問題

我的數據模型需要一定的靈活性,所以我目前正在研究在MongoDB中使用EAV模型或文檔存儲的可能性。

這裏是我的基本要求:

  • 用戶將能夠存儲和分享自己喜歡的東西(電視PROG,網站,歌曲等)。
  • 用戶可以存儲的可能「事物」列表未知。例如,用戶可能想要存儲他們喜歡的動物。
  • 用戶可以與其他用戶分享他們最喜歡的東西。但是,用戶可以決定他/她與其他用戶分享什麼。例如,用戶可以與一個用戶共享他們最喜歡的電影,但不是另一個用戶。

一個典型的用戶將根據他的朋友決定分享的內容,從他們的朋友列表中登錄並查看所有喜歡的東西。用戶也將更新他們自己喜歡的東西,這會在每個其他用戶查看他們自己的個人資料時反映出來。最後,用戶可以改變他的哪些朋友可以看到他最喜歡的東西。

我在Magento上工作過很多,它廣泛使用EAV模型。但是,我通過限制哪些用戶可以查看哪些信息來增加另一層複雜性。

因爲無模式格式給了我需要的靈活性,所以我馬上被吸引到了MongoDB。但是,我不確定在保存數據後訪問數據是否容易(或高效)。我還擔心如何管理數據更改,例如用戶改變他們喜歡的電影。

我希望有人能指出我正確的方向。這純粹是一個演示應用程序,我正在構建以進一步提高自己的知識水平,但我將其視爲真實世界的應用程序,其中數據訪問時間非常重要。

在傳統關係型數據庫中對這種應用程序進行建模讓我感到汗水,當我想到我需要爲一個用戶獲取數據所需的瘋狂連接數時。

感謝您的閱讀,請讓我知道我是否可以提供任何信息。

問候,

回答

1

你需要根據你需要如何訪問數據來選擇一個模式。

如果你只需要過濾掉一些值查看用戶的個人資料時,每個用戶的單一文件會內具有在應用程序中應用授權的用戶/組ID列表工作得非常好,每個最愛碼。在這種情況下,讀取和寫入都是對已知文檔的單個操作,所以會很快。

如果您需要跨多個配置文件的視圖,您的主文檔應該是最喜歡的。您需要設置正確的索引,但性能不應該成爲問題。

實際上,您所描述的權限不會爲EAV架構增加太多複雜性 - 只要屬性可以具有多個值,權限列表只是一個屬性。

+0

嗨 - 感謝您的重播。由於該應用程序將訪問的數據遠遠大於它將寫入數據的數據,因此我認爲,當用戶保存或編輯他們的收藏夾時,它會在每個用戶文檔中嵌入一個副本。這樣,每個用戶都可以快速訪問其他用戶授予他們訪問權限的內容。這確實意味着寫入數據將會更多地成爲開銷,但這不是一個值得關注的問題。 – NeglectedGoldfish