数据是啥?数据都去哪儿了?

572 阅读8分钟
原文链接: mp.weixin.qq.com

【这是一猿小讲的第  57 篇原创分享】

大家应该都忙着给祖国庆生,根本无心上班,所以精心为各位打造一篇,一点都不用费脑的文章,一起聊聊数据及数据存储的那些事儿。 敲黑板,讲重点,我们开始。

1. 数据是啥? 秒懂!

播放

数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的的原始素材。 数据可以是连续的值,比如声音、图像,称为模拟数据。也可以是离散的,如符号、文字,称为数字数据——引用百度百科。

2. 数据从哪儿来? 秒懂!

敢问你是否知道,当你点亮手机屏幕,手指在手机屏幕上的每一次舞动,背后到底为这个世界贡献了多少数据?

当你在购物网站时,浏览的那些名牌包包;当你使用聊天工具时,说过的那些话; 当你打开视频网站,观看虐狗的影视剧;当你……,其实背后就是五花八门、杂乱无章、点点滴滴的数据。

假如要把这些数据都打通攒在一起,那么就会在网络上看到一个透明的你自己( 做了什么坏事,跑都跑不了,哈哈,其实大家都是透明人)。

3.  数据放到哪儿?N秒懂!

本次分享的重点来了,既然知道了什么是数据,也知道了数据从哪儿来,那接下来就一起看看数据到底该存储到哪儿?

实事求是的说,虽然深耕互联网行业很多年,通过这次科普,感觉也是略显孤陋寡闻。 不深入不知道,一深入吓一跳,真是刷新了我三观,亮瞎了我狗眼。

如上图所示,按照数据库类型进行分类, 主要分为关系数据库(Relational DBMS)、键值存储(Key-value stores)、文档存储(Document stores) 、图形数据库(Graph DBMS)、时间序列数据库(Time Series DBMS)、资源描述框架存储(RDF stores)、面向对象的数据库(Object oriented DBMS)、搜索引擎(Search engines)、列存储数据库(Wide column stores)、多值数据库(Multivalue DBMS)、原生XML数据库(Native XML DBMS)、事件存储数据库(Event stores)、内容存储(Content stores)、导航数据库(Navigational DBMS)。 细心的小伙伴会发现,大概分为 14 大种数据库类型的系统。

纳尼? 14 种数据库类型的系统?! 第一反应就是孤陋寡闻。好了,不吹嘘,我粗略的把她们划分为 被程序猿频繁宠幸系列、被程序猿偶尔翻牌子系列、被程序猿打入冷宫系列,那接下来就逐个认识一下。

被程序猿频繁宠幸系列

关系型数据库(Relational DBMS) ,来个非专业的解释,关系型数据库可以很好地存储你买的包包,你的好友列表等等业务数据。

例如存储一个老师对应多个学生的数据(多对多),一本书对应多个作者(一对多),一本书对应一个出版日期(一对一)的一些关系模型的数据。

如上图所示,最常见 TOP 10 的关系型数据库, 当然被程序猿用的滚瓜烂熟的当属 MySQL。不过大数据正当时,所以还要提一嘴 Hive,它其实是一款基于大数据生态 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供 SQL 查询功能(先了解,你用到时再深入也未尝不可)。

键值存储数据库(Key-value stores) ,顾名思义只能存储键值对,是 NoSQL 领域中应用范围最广的,涉及轮子也较多的一类。

如上图所示,在键值数据库流行度排行中,Redis 不出意外的排名第一。 不过在这里也要提一嘴 Memcached、Ehcache,它们在缓存系统中也应用十分广泛。

另外在面试过程中,也会经常会问“常用的缓存数据库有哪些?Redis 与 Memcached 的本质区别是啥?Redis 与 Ehcache 的区别又是啥?”( 请问你能答上来吗?答案网上一搜一箩筐 )

文档存储数据库(Document stores) ,先来个非专业解释,支持存储格式不同的文档记录,一般直接用来存储 JSON。

如上图统计,MongoDB 当仁不让地占据了第一的位置。 不过在这里也要提一嘴 CouchDB,因为它在区块链中经常被当做状态数据库使用。

咳咳,还在坚持看,真棒! 接下来分享一下那些被程序猿偶尔宠幸的系列数据库(工作之中,解决特定场景时,偶尔会用到 )

被程序猿偶尔翻牌子系列

图形数据库(Graph DBMS) ,被鼓吹为大数据时代的利器,用来描述、存储、查询对象之间的复杂关联关系。例如你给张三打过电话,张三给李四打过电话,李四给..... ,这样就形成了一个通话记录关系网络分析图。

如上图所示,基于 Java 的 Neo4j 到目前为止是最受欢迎的图形数据库。 在做关系网络分析场景的项目,不妨拿去实践一下。

时间序列数据库(Time Series DBMS) ,来个非专业解释,是为了高效存储和快速处理海量时序大数据而设计的,做过监控应用的小伙伴应该会比较清楚,例如实时监测服务器的内存指标状态、CPU 状态、磁盘 IO 状态等一些性能监控的指标数据,并上报监控系统,监控系统一般都用时序数据库完成指标数据的存储。

如上图所示,InfluxDB 当仁不让地占据了第一的位置,这里要重点说一说它,它旨在处理高负载的存储和查询,在当前比较火热的大数据实时计算引擎 flink 源码中,发现也提供监控指标数据写入 InfluxDB 的实现。 而且在日常研发过程中,一般也都采用 InfluxDB 作为监控指标数据的存储,感兴趣的可以去官网 https://www.influxdata.com/products/influxdb-overview/ 深入实践一番。

不过在图中我们又见到了 Prometheus (普罗米修斯),在之前的《监控一哥Prometheus你可认识?》《监控实战Prometheus+Grafana》文章中,已经详细说过它,已经遗忘的可以再回味一下。

搜索引擎(Search engines) ,主要用于数据内容的搜索,支持复杂搜索表达式,全文搜索,源搜索,搜索结果的排序和分组等。

如上图所示,Elasticsearch 当仁不让地占据了第一的位置,我们在《傻瓜也能玩转日志归集》已经详细实践过,感兴趣的闲暇之余不妨阅读实践一下。

不过在面试中,偶尔会被问到 Elasticsearch(ES) 与 Solr 的区别? 你可否答上来? 答案网上搜之一箩筐,稍微提炼总结就 OK。

列存储数据库(Wide column stores) ,是按照列为基础逻辑存储单元进行存储的,读取效率高,没有冗余,特别适合在大数据领域使用。

如上图所示,在技术选型的时候,排名靠前的 Cassandra 和 HBase 肯定是首选。 弱弱的问一句,这两个到底啥区别呢? 只抛问题,不作答,网上答案搜之一箩筐。

咳咳,还在坚持看,真棒! 接下来看看那些被程序猿打入冷宫系列数据库。

被程序猿打入冷宫系列

导航数据库管理系统(Navigational DBMS)、内容存储(Content stores)、事件存储数据库(Event stores)、原生XML数据库(Native XML DBMS)、多值数据库(Multivalue DBMS)、资源描述框架存储(RDF stores)、面向对象的数据库(Object oriented DBMS)

讲真,关于被打入冷宫系列数据库的内容码了一大堆,感觉没啥鸟用,遂删之,用到之时或者闲暇之余再细说吧。

4.  全局排名上再来看一看

好了,假装 14 种类型的数据库我们都聊完了,那不妨了解一下 14 种类型下 352 个数据库系统的一个整体排名,重点关注前 10,在你在技术选型的时候,不妨当做一个参考指标吧。

了解完全局排名,不妨再看看 14 种类型的数据库,哪类比较流行? 可以看出被程序猿偶尔翻牌子的系列数据库逐渐流行起来,是不是大数据正当时,是不是人工智能正流行导致的呢? 不敢妄下结论,不过时间应该会告诉我们。

5.  写在最后

弱弱的再问一句,恰逢金九银十跳槽季,简历上有没有把 Redis、MongoDB 写成关系型数据库呢? 敢问你现在是否知道 MySQL、Oracle、ElasticSearch、MongoDB、Redis 到底属于哪一类呢?

好了,为了让你们节前的每一秒都过的充满意义,一点都不用费脑的文章到这就码完了,希望你们能够喜欢,为了让其他小伙伴能在为祖国庆生之余也进步,那就 动动手指转发分享一下 吧。

推荐阅读:

常见监控分为哪几类?

监控一哥Prometheus你可认识?

监控一姐Grafana你可认识?

监控实战Prometheus+Grafana