如何學習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的特點,待續。
作者在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修改過]
相關文章
- NoSQL學習——MongoDBSQLMongoDB
- mysql以及nosql的簡要學習MySql
- 如何定義NoSQLSQL
- SQL vs NoSQL:如何選擇?SQL
- java學習之道 --- 如何學習java?Java
- 如何學習vueVue
- 如何學習GOGo
- 如何學習機器學習機器學習
- 如何學習SciPy
- 如何學習JavaJava
- 如何學習前端?前端
- 如何高效學習
- 如何學習Vim
- 如何學習EJB
- java如何學習Java
- 如何學習jdon
- 從學習語文聊聊如何學習
- NoSQL 複習 (二)HBase基本原理SQL
- NoSQLSQL
- [譯] 如何學習 CSSCSS
- 【譯】如何學習CSSCSS
- 如何學習C++?C++
- 如何學習LinuxLinux
- 如何學習HadoopHadoop
- ☆☆如何學習MATLAB☆☆Matlab
- 如何更好的學習?
- 轉:如何學習javascriptJavaScript
- 如何學習技術?
- 如何藉助 NoSQL 提高 JPA 應用效能SQL
- [Redis 系列]redis 學習一,資料庫的演進及 Nosql 的初步認知Redis資料庫SQL
- 學習python多久?該如何學習python?Python
- 新手如何學習Java——Java學習路線圖Java
- 新手如何學習Python基礎?該如何正確學習呢?Python
- 如何做筆記/如何學習:筆記
- 跨行業如何學習好python?Python學習!行業Python
- 如何高效的學習python?python學習技巧Python
- Linux該如何學習呢?Linux學習分享!Linux
- 【提升學習力】如何讓學習效果提升 N 倍