(本次進度: loc 1065 – 1327)
今日讀的段落從data locality開始,declarative vs imperative的query language,再到map-reduce的基本介紹。這次幾乎每個段落都有具體的程式碼供參考,來更進一步使其論點更加具體。有趣的是,我們在這幾個段落可以一直看到乍看之下立場相對的解決方案從光譜的兩側出發,發展到一定程度後,卻又會在某些地方交匯。
例如data locality指的是document-based data model能一次就查詢出一個document的所有相關資料,但relational data model卻會需要進行多次的查詢來重建之。於是relational陣營便加入了可以在資料庫中直接存儲structured data(XML或JSON/BSON)的功能,甚至也可以直接對該structured data內的欄位進行檢索。但document-based陣營日子也不好過,一次就帶出整個document代表著不管你需不需要,一次噴出來的資料就是那麼大,如果只想更新一小部分也不是很有效率。後來就有些實作品開始加入了類似relational的query language和join,例如RethinkDB。
declarative vs imperative的部分,作者就「改變特定元素的背景色」一例,分別用CSS和JS來寫來呈現declarative language與imperative language的差別。雖然他強烈認為declarative language較適合資料庫應用,例如基於relational algebra的SQL query langauge,但仍有imperative language更加自然的情境,例如MongoDB的map-reduce query。但後者後來仍加入了aggregation pipeline以長得很像JSON的方式來引入類似的declarative query language。(題外話,這讓我聯想到ElasticSearch,這種長得很像data的語言我真的 … 不行啦啊啊啊 Q_O)
因此看完這幾個段落後,才讓我覺得「天下大勢,分久必合,合久必分」。作者認為綜合relational與document-based會是不錯的方向:
A hybrid of the relational and document models is a good route for databases to take in the future.
但最終這種集百家之長的東西常常都會變得過於複雜,然後又會有一群人根據自己的偏好取出「好的元素」,創造新的分支出來吧?看看那個C++,D,和Rust。
下一個段落要開始談的graph-based model就是我沒什麼經驗的部分了,令人期待。
你必須登入才能發表留言。