精心为各位打造一篇,一点都不用费脑的文章,一起聊聊数据及数据存储的那些事儿。敲黑板,讲重点,我们开始。
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/深入实践一番。
搜索引擎(Search engines),主要用于数据内容的搜索,支持复杂搜索表达式,全文搜索,源搜索,搜索结果的排序和分组等。
不过在面试中,偶尔会被问到 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 到底属于哪一类呢?
好了,为了让你们节前的每一秒都过的充满意义,一点都不用费脑的文章到这就码完了,希望你们能够喜欢。