数据库存储选型经验总结
作者:马刺
出品:大淘宝技术
工作中总是遇到数据存储相关的Bug工单,新需求开发设计中也多多少少会有数据模型设计和存储相关的问题。经过几次存储方案设计选型和讨论后发现需要有更全面的思考框架。
日常开发中常用的存储方案选型很多都是“拿来主义”的,凭借着经验、习惯选用,但对它们的细节特性或约束少有研究。
除了手边会用的存储方案,也应该关注市面上更合适的存储方案。一定的技术预研和储备能够帮助未来更好的技术方案设计。
故写了这篇文章,抛出我的总结和思考,希望日后可以将一些更先进 (合适) 的技术引入业务开发中,助力业务发展。
存储选型的考虑要素
存储选型的目的还是为了我们的使用场景和用户服务,因此在选型前需要回答自己一些 业务指标 & 技术指标 方面的问题,以便于我们清楚存储选型的应用环境。
- 用户量:用户量预估多少?几百几万还是几亿?
- 数据量:数据量预估多少?日均增量能有多少?
- 读写偏好:数据是读多一些还是写多一些?
- 数据场景:强事务型还是分析型需求?
- 运行性能要求:并发量是多少?高峰、平均、低谷分别预估是多少?
存储引擎分类及特性
数据库的分类方式非常多样,因参考维度不同而存在较大差异,下面是常见的一些分类。
数据库类型 |
常见数据库 |
关系型 |
MySQL、Oracle、DB2、SQLServer 等。 |
非关系型 |
Hbase、Redis、MongodDB 等。 |
行式存储 |
MySQL、Oracle、DB2、SQLServer 等。 |
列式存储 |
Hbase、ClickHouse 等。 |
分布式存储 |
Cassandra、Hbase、MongodDB 等。 |
键值存储 |
Memcached、Redis、MemcacheDB 等。 |
图形存储 |
Neo4J、TigerGraph 等。 |
文档存储 |
MongoDB、CouchDB 等。 |
先拿我们最熟悉的关系数据库来说,它的优点非常多,我们选用关系数据库的理由可简单概括为以下几点:
- 容易理解
可由二维表结构来逻辑表达,相对网状、层次等其他模型更加容易被理解。严格遵循数据格式与长度规范,数据以行为单位,一行数据表示一个实体信息,每一行数据的属性都是相同的。
- 操作方便
通用的 SQL 语言使得操作关系型数据库非常方便,支持 join 等复杂查询,Sql + 二维关系是关系型数据库最无可比拟的优点,这种易用性非常贴近开发者。
- 事务特性
支持 ACID 特性,可以维护数据之间的一致性,这是使用关系数据库非常重要的一个理由,例如同银行转账,张三转给李四 100 块钱,张三扣 100 元,李四加 100 元,而且必须同时成功或者同时失败,否则就会造成用户的资损。
- 数据稳定
数据持久化到磁盘,没有丢失数据风险。
- 服务稳定
最常用的关系型数据库产品 MySql、Oracle 服务器性能卓越,服务稳定,通常很少出现宕机异常。
带你读《2022技术人的百宝黑皮书》——数据库存储选型经验总结(2)https://developer.aliyun.com/article/1340015?groupCode=taobaotech