個人認為,MongoDB不太適合用作商城APP的數據庫:
能用是肯定能用的,但是不適合,開發(fā)過程中需要解決的問題會比較多且嚴峻;
單獨只使用MongoDB是不適合的,可以用它解決一部分的問題,也就是關系型數據庫和MongoDB配合著使用。
MongoDB是什么,以及它的優(yōu)點概括地說一下MongoDB是什么:它是一個基于分布式文件存儲的非關系型數據庫;我們常見的MySQL、Oracle都是關系型數據庫,數據在關系型數據庫中都是通過表的格式展現,可以看做二維表格;而MongoDB中的數據,類似于JSON格式(BSON)。
MongoDB除了性能上的優(yōu)勢之外,我認為最大的優(yōu)點就是數據模式自由,如果你愿意的話,可以將任何數據都保存到同一張表中(MongoDB中叫做Collection,等同于關系型數據庫中的Table);
比如像這樣,一條客戶信息,一條產品信息,兩條毫無交集的數據,可以保存到同一個Collection中(比較極端的做法,實際使用的時候還是要區(qū)分開):
為什么說MongoDB不太適合用作商城應用的數據庫首先,商城應用對事務一致性要求非常高,而MongoDB在事務的支持上,比較晚熟;MongoDB在3.0左右的版本,開始支持單文檔的事務,到了4.0以上的版本,開始支持多文檔事務;MongoDB發(fā)展的越來越好,但是在事務支持上,和關系型數據庫相比確實還是有差距。
第二,通常商城相關的業(yè)務,表結構相對都是比較成熟且固定的,比如客戶表、商品表、訂單表、支付表等等,同一個維度的數據結構基本都是相同的,比如客戶都會有姓名、手機號、收貨地址,這并沒有發(fā)揮MongoDB數據結構自由的優(yōu)勢,關系型數據庫已經可以很好地支撐。
第三,MongoDB在多表關聯(lián)方面,優(yōu)勢不大,比如需要查詢客戶下面所有的訂單,那么可能需要關聯(lián)客戶表和訂單表;而讓MongoDB來實現,訂單可以作為客戶下面的一個子文檔來存儲,大概就是這個樣子:
總結來說,MongoDB更多適用于大數據量、高并發(fā)、弱事務、數據結構“隨意”且“善變”的場景,是對關系型數據庫的補充。
我將持續(xù)分享Java開發(fā)、架構設計、程序員職業(yè)發(fā)展等方面的見解,希望能得到你的關注。