神刀安全网

新时代你必须懂的四种数据库

数据库对互联网开发的重要性就不必多说了。作为大数据和AI时代的互联网er,如果你还是只懂SQL,那你可就火星大发了。下面给大家总结下每个互联网er都必须懂的几种数据库产品:

MongoDB

新时代你必须懂的四种数据库

作为最火的NoSQL数据库,09年发布的MongoDB可谓是伴随了大数据时代的发展,创建并维护MongoDB的MongoDB公司也已在纳斯达克上市,市值达到十几亿美元,算得上是技术变现的典范了。

MongoDB最大的特点是表结构灵活可变,字段(类似SQL中的列项)可以随时修改。作为基于Json文档存储(Document-oriented)的数据库,MongoDB的每一条记录(在MongoDB中被称为文档)只是简单的以Json格式进行存储,因此MongoDB中压根不存在MySQL表结构这样的概念,你可以直接简单粗暴的将任意结构的数据塞入同一个表中,压根不必考虑表结构的限制,更不必像MySQL一样因为要修改数据表结构而大费周折。简而言之,往MySQL写数据像是在做填空题,你写入的数据必须与最早定义的表结构一致,而往MongoDB写数据就像是在做问答题,想怎么写就怎么写,这灵活度不要爽太多。

得益于MongoDB表结构灵活的这个特点,MongoDB在使用中要比MySQL灵活N倍,对于表结构需要经常改变的应用场景,MongoDB再适合不过。例如,有一个游戏应用,需要存储每个用户的信息,用户分为法师、战士等具有不同属性的角色,还有装备、技能等很多结构复杂的信息,游戏每次更新还可能会引入很多新的用户属性,这时如果你使用MySQL,那么你可能需要建立很多个表,定义很多个表结构,并且游戏的每次更新也可能会给你带来重定义表结构等一堆麻烦事,而如果使用MongoDB则这些麻烦统统不存在,因为你可以定义只一张表便可以容纳所有的信息,而且可以随时根据新的需求增减字段。

MongoDB除了表结构灵活这个优点外,还有可以横向扩展的Mongos集群、大文件存储、数据聚合查询等特性,能够适应大多数的互联网应用场景。

当然,凡事都有两面性,MongoDB自然也不例外,灵活表结构带来了使用方便这个优点,但是也给多表查询、复杂事务等高级操作带来了阻碍。因此,如果你的数据的逻辑结构非常复杂,经常需要进行复杂的多表查询或者事务操作,那显然还是MySQL这类关系型数据库更合适。

综上,MonoDB具备灵活可变的表结构,非常适合数据结构多变,数据需求模糊的应用场景,但是不适合需要多表查询等复杂查询的应用场景。

Redis

新时代你必须懂的四种数据库

作为最热门的key-value数据库,与MongoDB同一时期发布的Redis同样伴随了大数据时代的发展。

所谓key-value数据库,就是每一条记录只包含一个用于查询数据的Key,以及与之对应的存储数据的value,就如同现实生活中的门牌号与住户,而没有诸如表、字段这些常规数据库中必需的复杂概念,所有的查询都仅仅依赖于key值。key-value数据库可谓是数据库中最简单易用的一种,也得益于这种简单的数据结构,再加上Redis是把数据存到内存中的,Redis数据库能得到远高于MongoDB这类常规数据库的读写性能。当然,Redis的功能还不止key-value存储这么简单。相较它的前辈Memcached,Redis还支持数据持久化,list、set等多种数据结构,主从复制备份等一些列功能,因此Redis绝对称得上是key-value数据库中功能最全面、最简单易用的款。

但是,由于Redis阉割掉了数据表这样的重要特性,且所有的查询都依赖key,因此Redis也仅仅适用于数据表结构简单,查询条件也同样的简单的场景。对于复杂的数据表结构,以及复杂的查询需求,redis显然是满足不了的。同时,由于Redis需要把数据存在内存中,这也大大限制了Redis可存储的数据量,这也决定了Redis难以用在数据规模很大的应用场景。

综上,Redis牺牲了常规数据库中的数据表、复杂查询等功能,换来了很大的性能提升,非常适合数据结构是key-value、list这些简单类型的,又对读写性能有较高要求的应用场景。

ElasticSearch

新时代你必须懂的四种数据库

相较于MongoDB,晚一年发布的ES的知名度可能要低一些,但是在搜索引擎领域ES的名声绝对是是响当当的。相较于其他高大上的数据库产品,ES的出身要屌丝很多。ES的创建者Shay Banon曾经是一个失业的屌丝程序员,在无事可干的时候为了方便老婆搜索食谱而创建了ES(当然,当时还不叫ES),不料无心插柳柳成荫,成就了今天最热门的搜索引擎数据库,果然妹子才是程序员工作的最大动力。现今ES背后的Elastic公司已经获得数亿美金融资,当年的屌丝程序员Shay Banon也早已逆袭成为CEO并走上人生巅峰。诸位程序员看官读完这个励志故事是不是已经开始内心澎湃的想象自己出任CEO迎娶白富美那一天了?

新时代你必须懂的四种数据库

ES的特点,正如其名,那就是搜索。严格的说,ES并不是一个NoSQL数据库,而是一个搜索引擎。ES的方方面面当然也都是围绕搜索设计的。ES支持全文搜索,这里简单解释下什么是全文搜索:对于“我在北京的一家互联网公司工作”这样的数据,如果你搜索北京、互联网、工作这些词都能命中的话,这就是全文搜索,你每天都在用的百度、Google都属于全文搜索。值得一提的是,ES的全文搜索对中文也有很好的支持(中文分词器就有很多种),绝对能够满足国内大多数人的全文搜索需求。除此之外,ES还会自动的替你对所有字段建立索引,因此只要是存入ES的数据,你都可以快速方便的进行各种查询,即使是复杂的聚合查询也可以得到不错的查询性能,你再也不用为如何建立各种复杂的索引而头痛了。另外,ES还有与之配套的ELK套装,帮助你快速实现高大上的数据可视化、日志可视化平台,绝对是在领导面前加分的法宝。

说了这么多ES的优点,你是不是觉得ES简直万能了?可惜不是的,ES也有很多的短处。前边讲到ES会自动的替你建立索引,尽管这能给全文搜索以及聚合查询带来很多好处还能替你省了建索引这一麻烦事,但是这个特性带来的负面作用也是不能忽略的。ES需要在创建字段前要预先建立Mapping,Mapping中包含每个字段的类型信息,ES需要根据Mapping为字段建立合适的索引。由于这个Mapping的存在,ES中的字段一但建立就不能再修改类型了。(例如,你建的数据表的某个字段忘了加全文搜索,你想临时加上,但是表已经建好并且已经有很多数据了,这时候该怎么办呢?不好意思,你只能把整个数据表删了再重建一遍!)因此,ES在数据结构灵活度上是远不如MongoDB的。ES的缺点还不止这些,自动建立索引使得ES的写入性能也收到了影响,要明显低于MongoDB。对于同样的数据ES占用的存储空间也要明显大于MongoDB(建那么多索引能不占空间吗?),对硬件资源的消耗也是非常厉害,64G内存+SSD基本是标配,算得上是数据库中的贵族服务了,因此如果你的老板很小气,对于ES的选用可要慎重喽!

综上,以搜索为核心的ES非常适合需要全文搜索,以及需要对全表数据进行复杂聚合查询的应用场景。再加上各种丰富的功能和很强的易用性,ES相比MongoDB还是有很多优势的。但是,它受限的写入性能、字段类型不可修改的特点以及对硬件资源的疯狂消耗,也决定了它不不适合用在那些数据价值不高,成本有限,不需要进行全文搜索和复杂聚合查询的普通应用场景中。

Hbase

新时代你必须懂的四种数据库

作为Hadoop项目的一部分,HBase是当年谷歌大数据三驾马车之一的BigTable方案的实现。也因此,HBase也拥有着Hadoop系列产品的最大优点,那就是海量数据的支持,以及极强的横向(存储容量)扩展能力。

和Redis类似,HBase也需要为每一行数据定义一个key,之后所有的查询都依赖这个key进行。但是不同的地方在于,HBase中的一行数据还可以有非常多的列项(类似MongoDB字段),数据会按照列进行分组和存储,同一列的数据存储在同一个地方,这也是HBase被称为列式存储数据库的原因。其实从本质上来说,HBase相当于是把逻辑上的一张大表按照列族分拆成若干张小表进行分别存储,不仅是列,数据的行数到达一定数量后表也会再被拆分。因此,HBase能够把巨大的表分布到多台机器上,从而容纳规模近乎无限的数据。同时,对HBase进行横向扩展也非常方便,你基本只需要添加新的机器,而不用对数据做任何改动,就可以实现数据库容量线性的增长,这在其他SQL数据库中是难以做到的(尽管其他数据库也有诸如MongoDB分片集群之类的功能帮助你进行数据规模横向扩展,但是无论是在实施的难度上还是在对数据的影响方面这些都无法跟HBase相提并论。)

HBase的列式存储特性带来了海量数据规模的支持和极强的扩展能力,但是也给数据的读取带来很多的局限。由于只有同一列族的数据才会被存放在一起,同时所有的查询都必须要依赖Key,这就使得很多复杂查询难以进行。例如,如果你的查询条件涉及多个列项,或者你无法获取要查询数据的key,那么查询效率将会非常低下。因此,HBase仅仅适合查询条件简单,列与列之间联系不大的应用场景,最典型的比如搜索引擎所使用的网页数据库。HBase不适合数据结构复杂,且需要复杂查询的应用场景。

综上,HBase继承了分布式系统的典型特点,非常适合海量数据规模、查询条件简单的轻查询场景,但是不适合对复杂查询及查询性能有需求的重查询场景。另外值得一提的是,HBase是比较重的一款产品,需要依赖很多的Hadoop组件,因此如果你的数据规模不大,那就完全没必要杀鸡用牛刀,MongoDB这类产品完全可以更好的满足你的需求。

总结

以上四种数据库是当今NoSQL中最火爆的几款,掌握了它们,你基本就能cover住互联网开发中的大多数数据需求。这里还想强调的一点是,如同买衣服一样,没有最好的数据库,只有最适合你的应用场景的数据库,因此选用一款数据库前一定要想清楚自己的应用场景是否合适。再给大家总结下这些数据库的适用场景:

如果你对数据的读写要求极高,并且你的数据规模不大,也不需要长期存储,选redis;

如果你的数据规模较大,对数据的读性能要求很高,数据表的结构需要经常变,有时还需要做一些聚合查询,选MongoDB;

如果你需要构造一个搜索引擎或者你想搞一个看着高大上的数据可视化平台,并且你的数据有一定的分析价值或者你的老板是土豪,选ElasticSearch;

如果你需要存储海量数据,连你自己都不知道你的数据规模将来会增长多么大,那么选HBase。

最后,再给大家来个更加形象的对比:

Redis:

新时代你必须懂的四种数据库

Redis

MongoDB:

新时代你必须懂的四种数据库

MongoDB

HBase:

新时代你必须懂的四种数据库

HBase

ElasticSearch:

新时代你必须懂的四种数据库

ES

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » 新时代你必须懂的四种数据库

分享到:更多 ()