统计
  • 建站日期:2021-03-10
  • 文章总数:3772 篇
  • 评论总数:29 条
  • 分类总数:43 个
  • 最后更新:5月19日
文章 未分类

当对你的业务进行数据库选型时,你真的会选择吗?

小菜鸡
首页 未分类 正文

来源:慕课网

数据库选型的背景

随着计算机技术的发展,数据库已经成为计算机系统里面最不可或缺的关键基础设施之一。相比于其他基础设施软件,如操作系统、编译器等,数据库不仅需要提供基础功能,还要于业务发生联动,并通过提供更广泛的能力来满足不同的业务诉求。 特别是,数据库软件相比于操作系统等软件,具有更多的可选择性,不同的数据库软件也是各有特色。这就面临着,我们在真实的业务场景中,需要根据业务诉求的不同进行技术选型。 但是,面对复杂的数据库软件系统,你真的会选择吗?

常规选型方式

有的人说,对于关系型数据库,就无脑选择MySQL就行了,反正业内就是这么用的。而如果是商业版应用,那就选择Oracle即可。这种说法在某些场景下是ok的,但是对某些具体的业务诉求来说,可能就是埋了个坑。 首先,对于数据库来说,上面两种数据库都是典型的OLTP业务场景下的选型。虽然Oracle具备较强的OLAP能力,但是这毕竟是商业数据库,对于绝大多数小公司或者互联网公司来说,是根本不在选型列表里的。 那么,对于互联网业务,首先需要做的就是识别业务场景,看看数据规模如何,数据模型是什么,是否需要选择关系型数据库,是否需要支持较强的可扩展性,是否能够容忍数据丢失,要求的端到端性能指标是多少等等。

选型示例

以类似微博这种应用场景为例,我们不妨进行一个简单的系统设计。

首先,需要有一个表结构来记录用户信息,这个表结构需要有一个主键,来记录用户的唯一id 需要存在一个记录信息流的地方,由于信息流非常大,这里需要面对处理大量数据的场景 需要有地方承载起他用户评论、点赞、转发等相关信息 需要具备缓存能力,否则当业务规模很大的时候,无法及时响应用户信息 如果具备缓存能力,我们虽然提升了响应速度,但是这个缓存的数据可能及时性又不够强,完全存在用户看到的数据不是最新数据的情况 对于搜索场景,如何进行快速的检索? …
对于这个业务场景中存在的系统设计问题,我们只是进行了非常粗浅的讨论,便可以列举出一系列的问题,这里面我们做一个简单的总结,即在不同的业务场景中,我门可能需要面对的是不同数据规模、数据一致性、响应速度、可用性等问题。这里面其实都可以通过关系数据库来承载,也可以通过进行SQL语句进行业务抽象。但是MySQL显然不可以胜任,这就需要我们选择其他更适合的数据库产品了,例如ClickHouse,Cassandra等。

其中,如果我们识别到数据等价值密度很大,一点都不能出错(例如银行转账场景,或者用户充值场景)那就必须要选择ACID完整性支持很好的数据库,否则真出现问题的时候,面临的是公司破产的风险。至于这里为什么?其实事务本身的特性就已经告诉我么答案了。

总结

更进一步地,我们其实也能看出来,如果想要更深入地理解数据库选型,那我们必须更深入地理解数据库的特点,那么我们就必须更了解数据库的底层原理和实现机制。只有知其然,才能知其所以然,才能真正做到万变不离其宗地理解业务系统、数据库系统乃至整个计算机软件系统的底层原理。

有关更多关于数据库底层原理实现,大家可以关注我的新课《从0到1带你手写一个数据库系统》课程,链接:https://coding.imooc.com/class/711.html

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
客服邮箱:kefu@itcaiji.cn
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

-- 展开阅读全文 --
程序员提效 x10 的必备开源神器
« 上一篇
8种优化重复冗余代码的方式
下一篇 »
为了防止灌水评论,登录后即可评论!

热门文章

1
2
什么是高防CDN
4
推特计划推出点对点支付功能
5
p5.js 3D图形-立方体

标签