哈喽,大家好,我是汉斯老师。近几年来,互联网行业由于较高的薪资收入,受到许多人的追捧。很多年轻的学子,或是其他行业的有志青年,都想要投身到这个行业中来。然而一方面受到“互联网寒冬”的影响,最近频频传出各家知名互联网公司裁员缩编的消息;另一方面,大量的人才涌入,又使得互联网产业在职场上呈现出供过于求的特征,并最终导致了职场上的激烈竞争。那么互联网行业未来的潜力在哪里?我们又应该在哪个方向上发力,才能保证自己可以获得一份高薪而稳定的工作?基于多年的互联网行业从业经验,汉斯老师在这里向大家推荐大数据方向,希望通过本人的《三分钟入门大数据》和《十分钟精通大数据》等系列文章,帮助所有有志了解学习大数据的朋友掌握大数据的相关知识,也欢迎所有对互联网行业以及大数据领域感兴趣的朋友前来交流。
学习大数据相关知识的小伙伴们,应该经常会接触到一些NoSQL数据库。然而,很多新人往往对于NoSQL的概念以及其为什么会在大数据中被广泛提及和使用产生困惑,下面汉斯老师来给大家加深一下对NoSQL的理解。
什么是NoSQL(非关系型数据库)?
NoSQL直观的定义是非关系型数据库。
非关系型数据库的特点或优势是什么?
这里我们要从关系型数据库开始说起。关系型数据库就是我们日常开发或生产时常用的数据库,比如Oracle数据库,MySQL数据库等等。关系型数据库的特点在于其存储的结构化。大家回想一下,当我们想要存储数据到某个关系型数据库时,我们往往需要首先在数据库中创建一个表,然后定义表结构。所有需要存储的信息,需要以表字段的形式逐一定义出名称,类型以及长度等属性。当我们定义好这张表后,我们才能把数据按照定义好的格式存储进数据库中。那么这个时候,就会出现问题了。直观的比如下两个问题:
A. 如果某一条数据缺失其中部分表字段的值,但我们又需要存储它,那么我们只能按预设的结构把这条数据存储进去,即使其很多表字段的值为空。
B. 若因为某种原因需要增加一个表字段,则所有的数据,包括已经完成存储的一些数据也需要被增加表字段,即使对于这些数据来说,这个表字段完全没有意义。
当然,除了比较直观的问题外,还有一些较为隐晦但却很重要的问题,比如说:
C. 传统关系型数据库在读取数据时,是将一条数据的全部信息整行都读取到内存中,即使我们有时候只是需要其中一两个字段。
如上的一些问题,在数据存储量较小时,其实并不会造成太多的困扰。然而当我们进入到大数据的背景下来讨论这些问题时,这些问题就比较棘手了。试想一下,如果我今天要存储海量的会员数据,然而有的会员数据信息多,有的会员数据信息比较少,这个时候我要怎么定义表结构?如果按照最大化原则来做,是不是会造成大量的无效存储?如果有一天又要增加新的表字段,是不是所有的数据都要被改动?如此庞杂的表结构,在对海量数据进行统计分析时,如果都加载出来,是不是会极大地降低查询语句的执行效率?这些问题,事实上就是窜通关系型数据库在面对海量数据时的缺陷,而为了弥补这些缺陷,非关系型数据库就被提出来了。
非关系型数据库为什么能解决这些问题?
非关系型数据库能解决这些问题的关键,就在于其存储方式是非结构化的(或半结构化的)并且很多非关系型数据库是列式存储。
非结构化存储意味着在NoSQL数据库中,你不需要预先定义好表结构,每一条数据的表结构都可以是不一样的。这就解决了上面A和B的问题。而列式存储,则让数据库具备了快速查询或计算海量数据中某一个或几个字段的能力,这又解决了C问题。
事实上,非关系型数据库绝不只是为了解决上面这些问题而被广泛应用的,非关系型数据库与关系型数据库的区别也并非如此肤浅。然而对于初学者来说,首先要正确认识非关系型数据库最直观的特点。