Re: [請益] 選擇mongoDB或是relational database ??
看板Soft_Job作者DarkKiller (System hacked)時間4年前 (2020/03/23 12:01)推噓15(15推 0噓 8→)留言23則, 14人參與討論串2/4 (看更多)
※ 引述《pracinverse (改)》之銘言:
: 什麼樣的資料適合放在MongoDB?? 甚麼樣的資料和放在傳統的RDB??
: 最近被問到這樣的問題有點答不出來
: Q1. scalability算不算是MongoDB勝過RDB的一個優點呢??
: 文獻上是說MongoDB在做scalability比較方便,
: 它可以自動地把data partition到所有的database servers上,
: 所以在application layer寫程式access database的時後,
: 可以不用關心底下有幾台database server
: 但是我記得在RDB也有partition的功能,
: RDB也可以把data partiton到不同的database server上面,
: 所以說scalability到底算不算MongoDB勝過RDB的一個優點呢??
: Q2. 如果說data之間有relation的話是不是用傳統的RDB會比較好??為什麼??
: 比方說 https://dhhmzgirqh63s.cloudfront.net/467.gif
: 像northwind database裡面這種shopping cart進出貨相關的資料
: 是不是放在RDB會比較好??
: Q3. 目前只有想到MongoDB勝過RDB一個明顯的優勢就是schemaless
: 因為不需要pre-define schema,
: 所以預期將來schema可能會有變動的話,選擇MongoDB會比較好。
: 有沒有什麼類型的data是放在RDB比放在MongoDB好的呢??
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.218.155
: ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1478057441.A.1C7.html
: → kenwufederer: 你要做什麼? 11/02 12:07
: → ripple0129: google mongoDB優點 11/02 12:40
: → blackacre: 作業要自己寫 11/02 12:42
: 推 jerry74: 要求強一制性mongo就不適合 11/02 13:03
:
: jerry大的意思是mongodb的ACID只在document level
: 所以如果我需要同時access multiple documents就會有dirty read的問題是吧??
: ※ 編輯: pracinverse (59.115.199.156), 11/02/2016 13:52:40
: → manaup: 作業? 11/02 14:24
: → cha122977: 想了解+1 11/02 15:12
: → ldkrsi: mysql和postgresql都能塞json格式了 現在的差異沒 11/02 16:47
: → ldkrsi: 有幾年前那麼大了 11/02 16:47
: → async: 可能面試被問到的 11/02 21:32
來回個 2016 年的文章,如果是作業的話應該也過期了,加上最近幾年 MongoDB
的變化不少...
我建議是,能用 RDBMS 就用 RDBMS,沒必要去用 NoSQL。正規化理論與 ACID 帶
出來的好處反而會讓整個團隊不用專住在這些雜事上面。
熟悉 PostgreSQL 就用 PostgreSQL,熟悉 MySQL 的就用 MySQL,先設計資料庫架
構 (& 正規化) 反而會對後來帶來很多好處。
從這篇文章之後 (2016 年年底) 到現在有不少改善,先抓幾個比較大的時間點,
這邊從 2016 年初的 3.2 開始:
* 3.2 開始切到 WiredTiger,靠著穩定許多的引擎大幅改善了 MongoDB 底層
的健康度:
https://docs.mongodb.com/manual/core/wiredtiger/
* 3.2 開始引入了 LEFT OUTER JOIN 的概念 $lookup:
https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/
* 3.6 開始引入了 $jsonSchema 可以強制輸入格式:
https://docs.mongodb.com/manual/reference/operator/query/jsonSchema/
* 4.0 開始可以使用 multi-document transactions (on replica set):
https://docs.mongodb.com/manual/core/transactions/
* 4.2 開始可以使用 multi-document distributed transactions:
https://docs.mongodb.com/manual/core/transactions/
你會發現 MongoDB 開始在實做 RDBMS 裡很多重要的性質:
* WiredTiger 採用 MVCC,對應到 MySQL 的 InnoDB 或是 PostgreSQL 自身
的引擎。
* $lookup 對應到了 JOIN (& 正規化)。
* $jsonSchema 對應到了 SQL constraints。
* transactions 則是 RDBMS 的重點。
現在的硬體又莫名的暴力,而且有雲端服務可以租用,通常都不需要分散架構就可
以幹不少事情 (像是 AWS 的 r5.24xlarge 有 768 GB RAM),RDBMS 保證的特性會
讓服務品質穩定很多。
如果真的有很大量的需求,我會推薦去看:
* TiDB (相容於 MySQL protocol)
* CockroachDB (相容於 PostgreSQL)
不是 100% 相容,但應該是涵蓋大多的情況,不相容的部份大多是為了在多機效能
時的妥協。
--
Resistance is futile.
https://blog.gslin.org/ & <gslin@gslin.org>
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.116.104.21 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1584936108.A.9A4.html
推
03/23 12:04,
4年前
, 1F
03/23 12:04, 1F
推
03/23 12:50,
4年前
, 2F
03/23 12:50, 2F
→
03/23 13:16,
4年前
, 3F
03/23 13:16, 3F
推
03/23 13:28,
4年前
, 4F
03/23 13:28, 4F
推
03/23 14:51,
4年前
, 5F
03/23 14:51, 5F
推
03/23 15:57,
4年前
, 6F
03/23 15:57, 6F
推
03/23 18:09,
4年前
, 7F
03/23 18:09, 7F
→
03/23 18:09,
4年前
, 8F
03/23 18:09, 8F
推
03/23 18:25,
4年前
, 9F
03/23 18:25, 9F
→
03/23 18:25,
4年前
, 10F
03/23 18:25, 10F
推
03/23 19:08,
4年前
, 11F
03/23 19:08, 11F
推
03/23 19:53,
4年前
, 12F
03/23 19:53, 12F
→
03/23 19:53,
4年前
, 13F
03/23 19:53, 13F
→
03/23 19:53,
4年前
, 14F
03/23 19:53, 14F
→
03/23 19:53,
4年前
, 15F
03/23 19:53, 15F
→
03/23 19:54,
4年前
, 16F
03/23 19:54, 16F
推
03/23 23:15,
4年前
, 17F
03/23 23:15, 17F
推
03/24 00:28,
4年前
, 18F
03/24 00:28, 18F
推
03/24 03:00,
4年前
, 19F
03/24 03:00, 19F
推
03/24 09:11,
4年前
, 20F
03/24 09:11, 20F
→
03/24 09:11,
4年前
, 21F
03/24 09:11, 21F
推
03/24 12:23,
4年前
, 22F
03/24 12:23, 22F
推
03/30 21:54,
4年前
, 23F
03/30 21:54, 23F
討論串 (同標題文章)