很多年來我一直只懂SQL,沒有學習其他database,早十年NoSQL還是剛冒起,我還有點看輕它,覺得它冇用。俗語有云,當你手拿著鎚子,所有的問題都變成釘子。只懂SQL,很自然習慣把所有問題都用Relational Database去解決,儘管要花更加多的氣力,有時殺雞亦要用牛刀,因為只得一把刀。
這本書2018年出版,已經是第二版,很多年前第一版時已經想看。只不過是短短三年,書中有些code已經過時了,新版本database的syntax有點不一樣,不過基礎理論沒有改變,仍然合用。NoSQL有太多選擇,想學習也老鼠拉龜無從入手。這本書介紹最熱門的七個database,從傳統SQL的Postgres為起點開始,然後逐一講解其他NoSQL DB的優劣trade-off,什麼情況適合應用。比起每次只教一種database的書,讓讀者有宏觀的視野。
因為一本書要教七個DB的關係,這本書的內容非常壓縮,簡單的基本操作甚至略過不談,直接叫讀者去看官方document。每個DB的教程分為三部份,讓讀者可以連續七個星期,每個週用三日學完。我一口氣一次過看完,一章大約要用四個小時,不過我只是跟著example打code玩下個DB,沒有個每日的功課,若果做埋功課,大約要兩倍時間。
第一章Postgres是溫習SQL,我以前用開MySQL同SQLite,也算是學新野。第二章教HBase是columnar database,沒有隨意search的功能,要靠index去讀data,但是非常scalable,是Google Cloud Bigtable的開源版。第三章教MongoDB是document DB,search JSON的功能很強大,不用寫schema很方便。第五章教couchdb,與MongoDB一樣都是寫JSON object,但couchdb的read要事先建立views,另外監視change的功能也很好用。
第六章教是我最有興趣的Neo4J,但書中教了graph DB的很皮毛,連Cypher語法如何閱讀也沒有教,我要上網再找資料自學。Graph DB同SQL很大分別,完全是另一個類型的應用,學了大開眼界。第七章教AWS DynamoDB,個database本身很平平無奇,強大是AWS後台的支援,連著AWS其他功具一起教,學習寫data pipeline,提升用DB的另一個層次,真正的big data。最後一章教redis,簡單易用夠方便,我認為redis應該早些教,in memory key-value store都啱做一些quick and dirty job。
這是一本不適合新手的入門書,教的東西很廣闊但很膚淺,主要是給讀者一個perspective,之後讀者就要靠自己去看document了。若果要看完一本書就能立即上手揼project,拖著一步步教導如何建站,這本書並不適合你。反而這本書更像是sampler,淺嚐每種DB的味道,並例一起觀察它們的異同,然後覺得那個DB有用,就再上網去找資訊深造。讀這本書有一個好處,讀完後基礎理論打了底,讀official document快很多,可以直接跳過不用看其他書,反正去到最後都係要翻查參考official document。