mysql5.7学习nosql_如何学习NoSQL?
How You Should Go About Learning NoSQL
作者在twitter上總結:
1: 用 MongoDB. 2: 花20分鐘學習Redis 3: 觀察這個video理解Dynamo.
這篇文章主要是明確兩個概念:
1.第二索引和Join問題,在關系數據庫中,通常除了主索引主鍵primary key之外,還有第二個index。而NoSQL一般只有主鍵,沒有第二索引,那怎么替換呢?
作者認為可以無需第二索引,以Score表為例子,有主鍵Id, LeaderboarId 和UserId以及Score四個字段。作者意思再創建另外一個表有兩個字段:LeaderboardId 和 ScoreIds,表達屬于同一個leaderboard所有Score。通過兩次查詢,首先根據LeaderboarId獲得所有的 ScoreId集合,然后再在Score表中根據主鍵Id(ScoreId)獲得其余字段。
在關系數據庫中可能將ScoreIds看成一個數組,因而效率不太好,但是如果數據庫引擎將其看成是一個整塊對象(可以Push remove和切片slice),這個方案就不會那么夸張了,當然,不可否認第二索引也許更好些。
第二個需要明確的是joins,雖然有些NoSQL支持第二索引有些其他不支持,但是他們幾乎都認為joins是狗屎。
為什么呢?因為joins導致數據庫切分sharding無法實施,Sharding是大多數NoSQL可伸縮的方案。
以score為例,leaderboard的1 3 5 7 9的score數據也許在服務器1,而服務器2包含 leaderboard的2 4 6 8 10數據,一旦你這樣開始切分你的數據,join將不會起作用。比如要通過join Scores,userId和Users.Id獲得UserName,因為在不同服務器上,就無法獲得。
那么我們如果處理無join(joinless)世界呢?在你自己應用程序中使用join類似功能,比如通過二次查詢,你首先獲得所有scores數據,然后,通過再通過查詢Users表獲得UserName集合。增加代碼必要的復雜性才能進行水平伸縮。
作者在該文還談了具體幾個NoSQL的特點,待續。
[該貼被banq于2011-08-16 09:58修改過]
總結
以上是生活随笔為你收集整理的mysql5.7学习nosql_如何学习NoSQL?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql update n_mysql
- 下一篇: mysql里b树_MySQL-B树/B+