在面对一般业务数据、大数据、海量数据,以及针对不同的业务场景如:订单处理、业务统计、商业智能等,数据库的选型至关重要,这篇文章我们来梳理一下,在业务的不同阶段我们应该做怎样的数据库选型?
阶段一:需要快速搭建的交易管理系统
这个阶段,基于业务的需求,我们需要快速的构建一个满足ACID的交易系统,我们需要选择事务型数据库,并保证能够快速地结合我们的技术栈进行敏捷开发。
在这个网站可以看到实时的数据库流行趋势:https://db-engines.com/en/ranking/relational+dbms
我们来看看关系型数据库的排名:
可以看到制霸的依旧是几个老牌数据库厂商,国内厂商华为gaussdb、阿里数据库oceanbase,但是基本上对上国外老牌厂商还是打不了,撇开技术实力不谈,生态是个最大的问题。
在进行技术选型的时候,我们应该考虑几点:1、生态:比如业界使用的多吗?我们常用ORM框架是否提供对该数据库的支持?;会这种数据库管理、运维的人才多吗?2、费用:是否收费 3、性能上是否满足业务需求;当然由于我们和A国的竞争,我们还需要考虑可持续性的问题。
mysql | postgresql | oracle | sqlserver | |
评价 | 广泛使用;会的人多;绝大多数技术框架都提供支持;免费;性能一般单表500w行一下问题不大;有可能有可持续性问题 | 近年来上升趋势人比较明显;但是非常会的比较少;目前主流的技术框架都开始支持;性能据说能达到mysql的10倍,就个人使用体验来讲,性能绝对吊打mysql;全部开源,没有政治风险 | 在性能和支持上,无疑oracle是最好的,但是他收费,有A国政治风险 | 微软出品,确实是精品。但是它相对来说比较封闭,微软系的在用 |
所以我的建议是
不缺钱oracle
缺钱但有人,并且在项目初期就预计有上千万的数据量pgsql
数据量不大,业务紧急用mysql。
阶段一:交易量快速上升
交易量的快速上升,让我们对性能和并发提出了更大的要求。这个时候我们需要一个能够提供高并发和低延时并且便宜的数据库。我们这里讨论的是因为IO瓶颈导致的性能问题。
业内多选择内存数据库,来保存一定种类的数据,我们使用这类数据的时候不需要磁盘寻址和强制的事务处理,就只要查出来就好。这个业界一般用redis,我们就不要自己去选型了,这个就是目前市面上最好的。
为什么用?可以参考我关于redis的文章
https://blog.csdn.net/qq_35789269/article/details/117633073
阶段三:我需要对大量数据(不到TB级)进行检索和统计
这个时候我们选elasticsearch搜索引擎,也可以说成的采用倒排索引的内存数据库。关于elasticsearch可以查看我的这篇文章。促使我开始用es的原因,是因为一个简单的函数count(),在五千万以上的单表上无论是mysql和pgsql都做不到在1s内返回数据,但是es可以。并且es能够在抽象层面和我们的关系型数据库的表一一映射起来,能够做到外在逻辑的一致性。
https://mp-new.csdn.net/mp_blog/creation/editor/110210127
阶段四:我需要对海量数据进行存储,并提供商业分析报表
这个时候建议采用hdoop技术栈,使用hive做数据仓库,使用hbase做即时查询,其实hbase和redis作用基本差不多,只不过光使用内存太贵了,海量数据存下来根本是天价。价格可以参考SAP的HANA数据库,贵上天际。
关于这套技术栈,其实不亚于建立一个数据中台:可以参考我写的这篇文章。
https://mp-new.csdn.net/mp_blog/creation/editor/118073637
总结一下:
redis | mysql | elasticsearch | hbase | hive | |
容量/容量扩展 | 低 | 中 | 大 | 海量 | 海量 |
查询时效性 | 极高 | 中等 | 较高 | 较高 | 低 |
查询灵活性 | 较差 | 非常好 | 较好 | 较差 | 非常好 |
写入速度 | 极快 | 中等 | 较快 | 较快 | 慢 |
一致性、事务 | 弱 | 强 | 弱 | 弱 | 弱 |