6

DDIA閱讀紀錄(3) – 第二章續:歷久彌新的The Great Debate – 軟人手札

 3 years ago
source link: https://softman.blog/2021/05/25/ddia-day3-ch2-the-great-debate/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

DDIA閱讀紀錄(3) – 第二章續:歷久彌新的The Great Debate – 軟人手札直接觀看文章

(本次進度:location 907 ~ 1065)

上次提到多對一或多對多的資料關聯性對data model帶來的挑戰,接下來的段落更進一步深入了這個主題,揭露了我過去不知道的歷史:由IBM的Information management system為代表的hierarchical model,以及作者稱為「the great debate」,至今仍爭吵不休的relational model與network model之戰。

作者帶入這個論點的楔子十分巧妙,大概是說:「不管一開始的資料表述多麼地join-free,資料間的連結往往因為後續增加的新功能而變得愈來愈強」,然後舉了LinkedIn的例子。一開始大家的履歷上的「公司」欄可能都只是個字串,但當為了該公司增加專屬profile頁面後,這些字串都得換成entity reference,一個人又可以有好幾家公司的經歷,多對多的關聯性就出現了。

hierarchical model基本上就是把資料表述為tree,跟今日的document-based model非常相似,多對多或多對一的關聯性對它帶來了一樣的挑戰,因此促生了relational model與後來式微的network model:CODASYL system。總括而言,relational model能夠勝出的原因在於成功的抽象化:query language加上不斷改善的query optimizer使開發人員不需要花太多心力在資料關聯性,而network model則會需要開發人員實際動手操作類似graph API的東西,建立"access paths"來取用資料,維護不易。今日hierarchical model又以document-based model之姿華麗回歸,挾帶schema flexibility、更好的效能、與更貼近應用端資料表述等標語,吾等碼農又該如何選擇?

關於這點,作者用一個很好的子標題提問切入:

Which data model leads to simpler application code?

而答案一如既往地無趣又實際:看情況。一切都要看你的應用中資料怎麼長,而我們開發人員的職責從古至今沒有改變,只是去了解問題的本質,設計其資料表述,再選用適當的工具去處理,如此而已。這也是為什麼本書要花這麼多篇幅來回深入討論不同data model的「性質」,而不是說「優劣」。我也很喜歡本書對schema-on-read和schema-on-write的觀點:這就像動態型別和靜態型別一樣,基本上沒有對錯,而爭辯永遠會在。

下回待讀的段落標題是「data locality for queries」,會不會針對其效能方面的實質效果做更深入的檢討呢?令人期待。

啊...啊啊啊... _(´ཀ`」 ∠)_ 觀看 James Tien 的所有文章


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK