专栏首页数据社聊聊数据库

聊聊数据库

数据库的发展基本上也是伴随着计算机技术经历了40年的历史,从最初的文件系统上的文件,到有结构的层次和网状数据库,一直到今天被广泛使用的关系型数据库。随着互联网和物联网行业的兴起,数据量飞速增长,对大数据的采集、存储和应用是每个数据库必备的技能。现在大多数应用都是数据存储密集型,而不是计算密集型。

数据存储发展

众所周知,文明的发展离不开信息的积累,而任何东西的积累离不开存储。因此,信息存储是文明发展的重要环节,从某种意义上讲,甚至可以说是人类迈入文明社会的标志之一。在历史上,人类曾经创造过很多信息存储的方法。我们一起来看下存储发展历程。

古老的东方开始使用甲骨文记录着自己的数据。

到了东汉,人们开始用纸张记录数据。纸的出现使得信息的记录、传播和继承,有了革命性的进步,促进了人类文化的传播。同时纸也为后来打孔卡的出现奠定了基础。

到了近代有了打孔卡、磁带、软磁盘(记得小时候初中一年级见到的电脑好像是这种存储)、硬盘。以前大学上计算机课,总是听老师讲以前的U盘都是几M的,现在的U盘都有上百G的,而且很便宜。

存储现在发展的已经很快,现在存储数据很廉价。而数据库的必备功能就是存储数据。

传统的数据库

传统的关系型数据库大家都接触的比较多,比如常见的Oracle、MySQL、PostgreSQL。数据库中每个属性都有特性的类型来定义,可以把数据想象成一个个表格存储着。和我们记录数据的认知非常相似,一行行记录着信息。

例如学生表里一条记录,就是一个学生他的属性描述,包括年龄、性别、出生年月日、所属班级等。但班级也有它的更详细的属性,那就可以在学生表里增加一个关系字段来表示该学生所属的班级索引,通过索引连接到班级表,可以查到这个班级的年级、班主任、学生人数等信息。

NoSQL数据库

随着移动互联网时代的到来,需要存储的数据量越来越大,对机器的扩展要求成为了数据库的必备技能,这也是传统数据库的弱点,比如Oracle在做集群是很有限的。NoSQL对于数据库的扩展和高可用是它的强项。

那为什么NoSQL能够有可扩展和高可用呢?

我们都知道CAP理论,CAP理论指的是一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

分布式系统的一致性通常称为ACID,即原子性、一致性、隔离性、永久性,传统的关系型数据库都能做到。简单的你可以理解一致性为数据写入数据库中,后续读取是否能立刻读取到更新的最新值。

另外,我们可以看到大多数NoSQL数据库都是“弱一致性”的,强调的是“最终一致性”,可以理解为如果你停止向数据库写入数据,并等待一段不确定的时间,那么最终所有的读取请求都会返回相同的值。换句话说,不一致性是暂时的,最终会解决。通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上改观。显然,NoSQL大都是用一致性来换取了可用性和分区容错性。那么牺牲一致性到底值不值得呢?举个例子,淘宝双十一当天,对于商品的评论和访问数可能不需要那么在意,首要是要保证服务器的高可用,崩了什么都白搭了!

新型数据库

在实际的应用中,存在一种场景,我们要求数据库必须保证ACID和高可用性,于是一批新型的数据库诞生了,比如蚂蚁金服的OcenBase和最近的“新晋网红”数据库TiDB。他们看似近乎完美的支持的分布式一致性和高可用性,支持标准SQL,对传统的关系型数据库提供迁移兼容方案。

还有一个数据库可以关注下,Vertica。很多人把Vertica划分到传统关系型数据库中,但是他与传统型关系库又有不同:

  • Vertica是面向分析的而不是面向事务的,他的强项在于OLAP场景,对大量数据的读取和聚合表现强悍!
  • Vertica是基于列存储的,列存储让数据的分割查询变的更加灵活

Vertica并不是一个广泛应用的数据库,我们上面提到了CAP理论,提到所有数据库不能同时满足“三性”,但是对于特性的应用场景设计,就能很大程度上在“三性”上取得平衡。

Vertica的原型称为“C-Store”,C-Store最早是2005年学术界的一个项目,作者是2015年图灵奖获得者 Mike Stonebraker,同时也是Vertica的创办者。

论文总结一下三点:

  • 数据库的查询瓶颈是在IO上,而不是在CPU上,那么用CPU时间交换磁盘带宽是有意义的。一般有两种途径用CPU时间交换磁盘带宽。第一种方法是采用高效的编码技术,比如存储一个客户的住址,可以用6bits来编码所有的US州名,如果采用州名缩写,则需要16bits;如果用全称则更多。第二种方法是浓缩存储的数据,比如把N个数据,每个K bits,直接打包成N*K bits
  • 在物理上存储列的集合,每个集合都按照一些属性来排序。以同一个属性进行排序的列,组成projections。
  • 读写优化,构建WOS和ROS组件,用tuple mover联系它们

C-Store 应该是第一个将列存技术在实际系统中实现出来的,比Google的BigTable要早(公众号回复“列存储”,可下载C-Store和BigTable论文)。

我们怎么用数据库

其实以前的一些经典理论还是很有道理的,比如CAP、比如Raft呀,各个数据库还都是“术业有专攻”,别老想着用一种数据库打天下。比如,核心系统的事务数据还是选择使用MySQL或者postgreSQL。分析性数据库还是选择Vertica或者Greenplum。

本文分享自微信公众号 - 数据社(DataClub),作者:数据社

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 关于数据库,程序员应该了解的那些事

    对于很多程序员来说,公司选择什么样的数据库,基本不需要你来决定。当你加入一个公司的时候,公司的大部分技术选型已经确认,特别是数据库选型,因为数据库一旦选择,后期...

    WindyQin
  • 一文了解GreenPlum

    行式数据库是按照行存储的,行存储就是各行放入连续的物理位置,就行我们平时写字一样,一行一行的写,读取的时候也是一行一行的读取。像SQL server,Oracl...

    WindyQin
  • 从0到1搭建大数据平台之数据采集系统

    当你需要搭建大数据平台的时候一定是传统的关系型数据库无法满足业务的存储计算要求了,所以首先我们面临的是海量的数据。

    WindyQin
  • IM开发基础知识补课(六):数据库用NoSQL还是SQL?读这篇就够了!

    随着互联网大数据时代的到来,越来越多的网站、应用系统都需要支撑大量甚至海量数据存储,同时还伴有高并发、高可用、高可扩展等特性要求。

    JackJiang
  • NoSQL(MongoDB,Hbase,Redis)介绍

      NoSQL,泛指非关系型的数据库,随着互联网的发展传统的关系型数据库面对持续增长的数据处理起来显得越来越力不从心,此时非关系型数据库应运而生。

    用户4919348
  • 给数据库减负的八个思路

    传统的企业级应用,其实很少会有海量应用,因为企业的规模本身就摆在那里,能有多少数据?高并发?海量数据?不存在的!

    江南一点雨
  • 为什么要使用redis数据库?它有哪些妙用?

    redis是Nosql数据库中使用较为广泛的非关系型内存数据库,redis内部是一个key-value存储系统。它支持存储的value类型相对更多,包括stri...

    Java编程指南
  • 「分布式系统之美」知乎圆桌精选大放送,快来看看有没有你关注的问题吧!

    「分布式系统之美」知乎圆桌已上线一周, 部分问答引发了网友的热烈讨论,接下来就跟随小编一起来盘点大家最关心的问题吧!

    PingCAP
  • 数据库减负的八个思路 轻松应对海量存储难题

    传统的企业级应用,其实很少会有海量应用,因为企业的规模本身就摆在那里,能有多少数据?高并发?海量数据?不存在的! 不过在互联网公司中,因为应用大多是面向广大人...

    数据和云01
  • 【DB笔试面试507】基于数据库的数据复制技术构建灾备方案有哪些?

    基于数据库的数据复制技术大体上可分为两类:数据库自己提供的数据容灾模块和第三方厂商提供的数据库复制技术。以最常见的Oracle数据库为例,Oracle自己的数据...

    小麦苗DBA宝典

扫码关注云+社区

领取腾讯云代金券