作者DarkKiller (System hacked)
看板Soft_Job
标题Re: [请益] 选择mongoDB或是relational database ??
时间Mon Mar 23 12:01:38 2020
※ 引述《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://webptt.com/cn.aspx?n=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/ & <
[email protected]>
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.116.104.21 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1584936108.A.9A4.html
1F:推 plsmaop: spanner 呀哈哈 03/23 12:04
2F:推 musie: 对呀.那直接用spanner就好惹.. 03/23 12:50
3F:→ alan3100: 不管用RDB还是nosql 正规化跟ACID都是必要技能 03/23 13:16
4F:推 ripple0129: +1非特殊场景绝对sql优先 03/23 13:28
5F:推 locklose: 推 03/23 14:51
6F:推 aphiya: 很少听见有公司使用CockroachDB 感觉还是太新? 03/23 15:57
7F:推 frank910138: 请教一下,如果是物联网资料,每秒收集的那种,才适 03/23 18:09
8F:→ frank910138: 合用mongo吗, 还是要用rdbms? 谢谢 03/23 18:09
9F:推 plsmaop: 需要 transaction,需要 join 再用 rdbms,单纯大量写入 03/23 18:25
10F:→ plsmaop: 少读就用 lsm-based 的资料库 03/23 18:25
11F:推 sxy67230: 每秒收集 03/23 19:08
12F:推 sxy67230: 每秒收集rdbms跟nosql都可以做,就看你有没有分散式的 03/23 19:53
13F:→ sxy67230: 需求或是需要做transation,原则上用rdbms就足够应付了 03/23 19:53
14F:→ sxy67230: 。如果你不想占用mysql可以考虑spark streaming 读取 my 03/23 19:53
15F:→ sxy67230: sql的binlog来达成监控资料库的更新跟同步。 03/23 19:53
16F:→ sxy67230: 还有其他也是类似的作法就不说了,本质上都是类似的。 03/23 19:54
17F:推 drajan: 这个抽象叫CDC...change data capture 03/23 23:15
18F:推 new122851: CDC疾病管制署 03/24 00:28
19F:推 kobebset105: 推 03/24 03:00
20F:推 shortoneal: 我觉得如果你是决定要用哪个DB的人,你却不知道该用哪 03/24 09:11
21F:→ shortoneal: 个,就还是先用关联式比较稳 03/24 09:11
22F:推 JohnRoyer: 推 03/24 12:23
23F:推 genius945: 推 03/30 21:54