用於流派管理的 Nosql 與 sql
我希望為電影保留一個簡單的數據庫,其中包含名稱、發行年份、流派等詳細資訊。關鍵因素是流派條目,其中一部電影可以分為多種流派。使用基於 sql 的方法,一種方法是為每種類型創建一個單獨的表並輸入電影 ID。使用 nosql mongodb 方法,可以將基因儲存為數組。從儲存和按類型搜尋的目的來看,更好的方法是什麼?
在NoSQL和**關係數據庫管理系統 (RDBMS)**之間進行選擇時,主要考慮的唯一真正問題是:
- “數據是否具有明確定義的結構,還是非常非結構化/結構可變? ”
- “我需要對數據提出的問題總是很簡單嗎? ”
- 不太重要但有效:“我是否需要將數據分佈在集群中的多個伺服器節點上,或者擁有一台集中式伺服器就足夠了? ”
對於#1,聽起來您擁有一組結構良好的數據。事實上,它是一個非常簡單的結構,應該很容易在RDBMS中儲存和維護。如果您使用RDBMS,那麼要支持
Genres
多對多,Movies
您只需要一個額外的連結表(也稱為橋/連接表) ,通過儲存and來呼叫MoviesGenres
該連結表,該連結表將是多對多的,每個組合一行。您不需要“每種類型的單獨表格”來解決這個問題,只需一個附加表格即可。因此,如果有,那麼您的表中將有兩行用於記錄和.Movies``MovieId``GenreId``MoviesGenres``MovieABC``Genre1``Genre4``MoviesGenres``(MovieABC, Genre1)``(MovieABC, Genre4)
對於#2,這將取決於您的案例。如果您想問更複雜的問題,例如“ 2020 年之後發行了多少具有 3 種或更多類型的電影? ”或“哪些電影同時具有 Genre7 和 Genre9,並且在 2000 年之前發行? ”等等,那麼RDBMS就可以了查詢這些事情要容易得多,而且這樣做可能更有效(一般來說)。
對於#3,這僅取決於您的數據規模以及您對如何維護其背後的硬體的偏好。如果您計劃擁有數 TB 的數據和數十億行,您是否更願意為多節點集群付費以水平擴展數據,以權衡它可能並不總是在集群中的每個節點之間始終保持同步,或者您更願意將所有數據集中到一台主伺服器並隨著數據的增長而垂直擴展。現在這是一個有爭議的問題,因為現在甚至RDBMS也存在支持水平擴展的功能。因此,除非您預見到預先儲存大量數據,否則我不會像前兩個那樣關心這個問題。
一般來說,根據您提供的資訊,我的建議是使用 SQL ( RDBMS ) 解決方案,這樣您就可以靈活地根據需要以高性能方式查詢它,因為您有一個定義明確且簡單的結構為您的數據。