数据库系统的核心(数据存储别只会用数据库!这6大核心技术,弄懂了你也是专家)

数据库系统的核心(数据存储别只会用数据库!这6大核心技术,弄懂了你也是专家)
数据存储别只会用数据库!这6大核心技术,弄懂了你也是专家

数据量越来越大,到底该用哪种技术来存?

数据存储技术发展到今天,早已不是买几块硬盘那么简单了。

不同的数据,不同的使用场景,需要的存储方案就完全不一样了。选对了,系统就顺畅;选错了,后期迁移成本高,性能也跟不上。

今天,我就来聊聊现在主流的几种数据存储技术到底该怎么用。

一、关系型数据库

MySQL、PostgreSQL这些就是关系型数据库。

像订单支付、账户余额变动等要求绝对准确、一步不能错的操作,必须得用它。

为什么呢?

因为它严格遵守ACID四原则。

  • 原子性能保证一个操作要么全做完,要么全不做;
  • 一致性确保数据永远符合你设定的规则;
  • 隔离性让很多笔交易同时进行也不会乱套;
  • 持久性保证写进去的数据绝对不会丢。

这些特性,对线上业务太关键了。

但很多人把它用错了地方。

连每天上亿条的用户行为分析都让它来做,结果就是交易系统变慢,分析查询也快不起来。

它最擅长的,其实是频繁的、小批次的更新和插入,以及通过索引快速找到某几条记录。那些需要扫描大量数据的分析活儿,应该交给别的工具。

分析查询的活儿,谁来干比较合适?

这时候就需要数据仓库了。

说到数据仓库,我整理了一份数据仓库建设解决方案,里面涵盖了数仓建设的全流程,包括调研、需求梳理、建设规范、建模等等。需要自取:https://s.fanruan.com/entf5

二、数据仓库

当你的业务需要回答“这个季度哪个产品线增长最快”或者“客户复购率趋势如何”这种问题时,用关系型数据库来做,会非常吃力。这时,Redshift、Snowflake这类数据仓库就对口了。

简单来说,它和数据库的设计目标不一样。

数据库首要保证数据写入的效率和正确性,而数据仓库要先保证海量数据查询的速度。它用的一个关键技术叫列式存储。

我举个例子,一张销售表有50个字段,如果你只想算总销售额,数据库需要把每一行所有的字段都读出来,而数据仓库只读取“销售额”这一个字段的数据,速度差异非常大,占用的空间也更小。

数据仓库还有两个特点:

  1. 它专门用来存储历史数据,进行分析和生成报表。
  2. 采用MPP架构,用多个计算节点并行处理海量数据。

但它的数据写入通常是定时批量完成的,不太适合实时往里写数据。

说白了,它就是你的分析专用工具,把各个业务系统的数据同步过来,在这里集中做分析。

三、NoSQL数据库

聊完了规矩的表格数据,又有个问题:那些不那么规整的数据怎么办?

数据库系统的核心(数据存储别只会用数据库!这6大核心技术,弄懂了你也是专家)

比如用户随时可能更新的个人资料、物联网设备发来的各种信号、社交软件里复杂的好友关系。这些数据,就要用NoSQL了。

NoSQL其实是一大类技术的统称,针对不同情况有不同选择。

1、文档数据库

比如MongoDB,用类似JSON的格式存数据,一个文档里能把相关信息都放在一起。结构可以随时调整,适合存用户档案、商品信息这些。

2、键值数据库

比如Redis,速度特别快,主要用来做缓存。存一些像用户当前登录状态、热点商品信息这类东西,能大大减轻主数据库的压力。

3、列族数据库

比如Cassandra,能应付每秒非常大量的写入。适合存物联网设备上报的数据、操作日志这些场景。

4、图数据库

比如Neo4j,专门处理数据之间的关系,像社交网络中的朋友推荐、金融里追踪一笔钱的流动路径,用它效率很高。

你懂我意思吗?

选哪种NoSQL,关键要看你的数据主要是什么样子,以及你怎么用它。

四、搜索存储

如果你的需求是,找出所有包含“性能优化”且发布于去年、点赞超过100的技术文章,这就不是简单查询了,你需要的是像Elasticsearch这样的专业搜索存储。

它的核心是一个叫倒排索引的结构,能让你在毫秒级的时间内,从海量文本中找到想要的内容,并且进行非常灵活的组合筛选。

所以,它的主要用途很明确:

集中分析和查询日志、给网站或App内部的内容提供搜索功能、查询应用程序的运行监控数据。它处理的是那些需要被经常、随意检索的数据。

不过话说回来,你可别把它当成一个通用的数据库来用,比如用它来频繁更新账户余额就不合适。

讲到NoSQL和搜索存储,我就多说几句,现代应用架构经常是多种数据库混用,这就带来一个新挑战:数据怎么在这些异构系统之间流动?

比如,用户在前台的操作存在MongoDB里,需要实时更新到后台的搜索索引Elasticsearch以供查询。

我常用的FineDataLink这个数据集成工具在这方面也挺有用。它不仅仅能连接传统数据库,也支持像MongoDB、Elasticsearch、Kafka这些现代数据源。

你可以配置一个数据管道,让MongoDB里的数据变更自动同步到Elasticsearch,实现搜索结果的实时更新,省去了自己写中间件代码的麻烦。工具链接我放在这里,感兴趣的可以去试试看:https://s.fanruan.com/810gr

五、对象存储

图片、视频、PDF合同、软件安装包、原始的日志文件等等,这些非结构化数据数量巨大,增长又快。

用传统的文件服务器来管理,在需要扩容、做备份和让多个系统访问的时候,会非常头疼。用过来人的经验告诉你,对象存储,比如AWS S3、阿里云OSS,是现在处理这个问题最普遍的选择。

它的设计很简单:

给你存储的每个文件一个唯一的地址,文件本身加上一些你可以自己定义的标签信息。

这种设计有三个优势:

  1. 几乎可以无限地存下去;
  2. 用多少收多少的钱,很划算;
  3. 通过最普通的HTTP协议就能上传下载,和现在流行的云上应用开发方式很配。

说实话,它就是一个非常可靠且成本可控的大容量存储空间。

六、数据湖

很多人以为它就是一个特别大的、什么都放的存储系统。其实,对象存储或者HDFS才是提供存储能力的那个部分,数据湖是在此之上的一套管理方法

它的核心思想是:

先把各个地方来的原始数据,不管什么格式,都统一收集存储起来。

同时,必须下功夫做好配套的事情,要能清楚地知道存了哪些数据、它们从哪里来、质量怎么样、谁有权限访问。

如果只存不管,数据很快就会变得混乱,没人敢用,也很难用起来。数据湖的价值在于,让分析师能在一个地方发现、理解并使用来自全公司不同系统的数据,而无需关心数据物理存储在哪儿。

现在比较实用的做法是湖仓一体。

  • 数据湖存放原始数据,经过处理和整理后,那些需要高速分析的数据可以进入数据仓库;
  • 原始数据也保留着,供以后做新的数据分析和模型训练使用。

总结

所以你看,选择其实不难做:

  • 在线交易用关系型数据库。
  • 如果你要做批量分析和复杂报表,就用数据仓库。
  • 处理灵活的半结构化数据,就考虑NoSQL。
  • 做全文检索用搜索存储。
  • 存海量的图片视频等文件,就用对象存储。
  • 你想整合公司所有数据并做好管理,就按照数据湖的思路来构建。

现实中的大型系统,几乎都是这些技术组合在一起用的。

#数据#

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

最新文章

热门文章

本栏目文章