数据结构论坛

首页 » 分类 » 定义 » Redis初启一
TUhjnbcbe - 2024/8/22 16:30:00
北京治疗白癜风好的正规医院 http://www.pfzhiliao.com/

1、数据库存存储性能优化

在mysql的文章专题中我写过了关于传统关系型数据库的一些优化思路,整体来说,通过优化之后能够提升程序访问数据库的计算性能。但是还是有一些情况,即便是优化之后,使用传统关系型数据库无法解决的,比如。

当数据量达到TB级别时,传统关系型数据库基本做了分库分表,单表数据量也是非常大的。

对于一些不适合用关系型数据库存储的数据,传统数据库无法做到,所以数据库本身的特性限制了多样性数据的管理。

所以nosql出现了,它是指不同于传统关系型数据库的其他数据库系统的一个统称,它不使用SQL作为查询语言,并且相对于传统关系型数据库来说,它提供了更高的性能以及横向扩展能力,非常适合互联网项目中高并发且数据量较大的场景中,如下图所示,表示目前比较主流的不同类型的nosql数据库。

1.1、K-V数据库

kv数据库是指Key-value数据库,是一种以键值对存储数据的一种数据库,类似java中的map。可以将整个数据库理解为一个大的map,每个键都会对应一个唯一的值。


  key-value分布式存储系统查询速快、存放数据量大、支持高并发,非常适合通过主键进行查询,但不能进行复杂的条件查询。


  如果辅以实时搜索引擎进行复杂条件检索、全文检索,就可以替代并发性能较低的MySQL等关系型数据库,达到高并发、高性能,节省几十倍服务器数量的目的。以MemcacheDB、TokyoTyrant为代表的key-value分布式存储,在上万并发连接下,轻松地完成高速查询。

1.2、列式数据

1.2.1、列式数据库介绍

列式数据库是以列相关存储架构进行数据存储的数据库,主要适合与批量数据处理和即席查询。相对应的是行式数据库,数据以行相关的存储体系架构进行空间分配,主要适合与小批量的数据处理,常用于联机事务型数据处理。列式数据库以行、列的二维表的形式存储数据,但是却以一维字符串的方式存储,例如以下的一个表:

这个简单的表包括员工代码(EmpId),姓名字段(LastnameandFirstname)及工资(Salary).

这个表存储在电脑的内存(RAM)和存储(硬盘)中。虽然内存和硬盘在机制上不同,电脑的操作系统是以同样的方式存储的。数据库必须把这个二维表存储在一系列一维的“字节”中,又操作系统写到内存或硬盘中。

行式数据库把一行中的数据值串在一起存储起来,然后再存储下一行的数据,以此类推。

1,Smith,Joe,;2,Jones,Mary,;3,Johnson,Cathy,;

列式数据库把一列中的数据值串在一起存储起来,然后再存储下一列的数据,以此类推。

1,2,3;Smith,Jones,Johnson;Joe,Mary,Cathy;,,;

这是一个简化的说法。

列式数据库的代表包括:SybaseIQ,ParAccel,Sand/DNAAnalytics和Vertica。

1.2.2、列式数据库与行式数据库

传统的行式数据库,是按照行存储的,维护大量的索引和物化视图无论是在时间(处理)还是空间(存储)方面成本都很高。而列式数据库恰恰相反,列式数据库的数据是按照列存储,每一列单独存放,数据即是索引。只访问查询涉及的列,大大降低了系统I/O,每一列由一个线来处理,而且由于数据类型一致,数据特征相似,极大方便压缩。

最后卢东明很务实的指出,没有万能的数据库,SybaseIQ也并非万能,只不过给DBA们的工具箱里提供更多的选择,DBA需根据自己的应用场景自行选择。

在数据仓库领域,列式数据库和传统的行式数据库有何差别呢?列式数据库和行式数据库的拥护者均认为结合这两种技术的混合数据库是个不错的想法。

行式数据库擅长随机读操作,列式数据库则更擅长大批量数据量查询,而混合数据库则试图同时包含这两种技术的优点,在灾难恢复环境中,数据要么按列式存储,要么按行式存储。

未来将是列式数据库的天下,行数据库和混合型数据库都将渐渐消亡,原因如下:数据增长速度很快,对存储设备(主内存和SSD)的需求也将不断上升,随着主内存和SSD中压缩列所占百分比的提高,列式数据库随机读的弱点反而变成了优点,这样列式数据库不管是应付联机事务处理,还是大批量更新或大型报表需要执行的复杂查询都能应付自如。对于更新操作而言,列式数据库和行式数据库在这方面已经没有多大差距了,因为大部分更新操作只会影响到一行中的一到三列(字段),同时,大部分更新操作影响的是最近的数据,因此主内存/SSD缓存中数据会越来越多。对于插入和删除操作而言,先在内存中快速更新索引,然后再写入磁盘,这意味着在I/O密集型情况下也不会有明显的性能下降。对在线备份而言,按列存储方法压缩数据后备份时间窗口将会更短。

对今天的数据仓库而言,列式数据库的性能和传统行数据库相比,根本不在一个数量级上,列式数据库已经得到了广泛的认可和使用(SybaseIQ已经有十年历史,也出现了一些新兴列式数据库公司,如Vertica),数据库巨人Oracle也按捺不住,在其Exadata数据库机中也加入了按列存储选择,IBM则提供了一个列式专用设备,它可以确定什么数据该按列存储,什么数据该按行存储,然后将事务分流到相应的设备。

1.2.3、列式数据库优缺点

列式数据库从一开始就是面向大数据环境下数据仓库的数据分析而产生,它跟行式数据库相比当然也有一些前提条件和优缺点.

列式数据库优点:

极高的装载速度(最高可以等于所有硬盘IO的总和,基本是极限了)

适合大量的数据而不是小数据

实时加载数据仅限于增加(删除和更新需要解压缩Block然后计算然后重新压缩储存)

高效的压缩率,不仅节省储存空间也节省计算内存和CPU.

非常适合做聚合操作.

缺点:

不适合扫描小量数据

不适合随机的更新

批量更新情况各异,有的优化的比较好的列式数据库(比如Vertica)表现比较好,有些没有针对更新的数据库表现比较差.

不适合做含有删除和更新的实时操作.

1.2.4、常见误区

一个常见的误区认为如果每次扫描较多行或者全列全表扫描的时候,行式数据库比列式数据库更有优势.事实上这只是行式数据库认识上的一个误区,即认为列式数据库的主要优势在于其列分开储存,而忽略了列式数据库上面提到的其他几大特征,这个才是列式数据库高性能的核心.

1.3、文档型数据库

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

整体架构:

内部架构:

它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

面向集合存储,易存储对象类型的数据。

模式自由。

支持动态查询。

支持完全索引,包含内部对象。

支持查询。

支持复制和故障恢复。

使用高效的二进制数据存储,包括大型对象(如视频等)。

自动处理碎片,以支持云计算层次的扩展性

支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。

文件存储格式为BSON(一种JSON的扩展)

可通过网络访问

所谓“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。

模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON(BinarySerializeddOcumentFormat)。

MongoDB服务端可运行在Linux、Windows或OSX平台,支持32位和64位应用,默认端口为。推荐运行在64位平台,因为MongoDB

在32位模式运行时支持的最大文件尺寸为2GB。

MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。

1.4、NewSql

很多企业都需要处理来自多个数据源的复杂数据,因此需要利用数据库管理系统来存储和管理数据。现在,有很多不同类型的数据库系统,而找到一个正确的数据库不是一件容易的事。这需要考虑业务需求,以便选择正确的数据库管理系统。

企业使用关系数据库管理系统(RDBMS)来存储和管理他们的数据。然而,这些系统无法处理海量的复杂数据,无法满足当今数据库用户的需求。因此,很多企业都在寻找能够在保持传统数据库系统重要特性的同时,也能提供可伸缩性、可用性和高性能的数据库系统。数据库软件供应商也已经确定了这一需求,并开发了NewSQL数据库来弥补传统数据库系统的缺陷。

NewSQL数据库在不放弃传统数据库优势的前提下解决了问题。NewSQL关系数据库管理系统为OLTP提供了与NoSQL系统相同的可伸缩性能,在保证传统数据库系统的ACID的同时,也能处理在线事务的读写工作负载。NoSQL数据库使用的数据结构与关系数据库中使用的数据结构不同,这使得NoSQL数据库中的某些操作更快。

1.4.1、什么是NewSQL数据库

NewSQL数据库是现代SQL数据库,它解决了与传统联机事务处理(OLTP)RDBMS相关的一些主要问题。它们在保持传统数据库管理系统优点的同时,力求实现NoSQL数据库的可伸缩性和高性能。换句话说,NewSQL数据库是一种特殊的关系数据库系统,它结合了传统数据库OLTP和NoSQL的高性能和可伸缩性。它们保持了传统DBMS的ACID(原子性、一致性、隔离性和持久性)。ACID事务特性确保了完整的业务流程、并发事务、系统故障或错误时的数据完整性,以及事务前后的一致性。

NewSQL数据库在内部设计方面有所不同,但它们都是运行在SQL上的rdbms。它们使用SQL来接收新信息,同时执行许多事务,并修改数据库的内容。NewSQL系统的主要包括新的技术架构、透明的数据分片中间件、SQL引擎和数据库即服务(DBaaS)。

分区/分片:几乎所有的NewSQL数据库管理系统都是通过将数据库划分为不同的子集(称为分区或分片)来扩展的。数据库中的表被水平地分割成几个分片,这些分片的边界基于列值来划分,来自不同表的相关片段被连接以创建分区。

副本:此功能允许数据库用户创建和维护数据库以及副本。数据库的副本存储在与主站相连接的远程站点或距离很远的站点。用户可以同时更新副本,也可以更新一个节点并将结果状态转移到其他副本

辅助索引(二级索引):辅助索引允许数据库用户通过使用主键以外的其他值有效地访问数据库记录。

并发控制:此功能可解决多用户系统中当多个用户同时访问或修改数据时可能出现的问题。NewSQL系统使用此功能来确保同步事务,同时保持数据完整性。

故障恢复:NewSQL数据库有一种故障恢复的机制,使它们能够在系统崩溃时恢复数据到一致的状态。

其中一些好处包括:

数据库分区减少了系统的通信开销,从而可以轻松地访问数据。

即使出现系统故障或错误,ACID事务也可以确保数据的完整性。

NewSQL数据库可以处理复杂的数据。

NewSQL系统具有高度可伸缩性。

1.4.2、常用的NewSql

Vitess(开源)

Vitess是一个分布式MySQL工具集,它可以自动分片存储MySQL数据表,将单个SQL查询改写为分布式发送到多个MySQLServer上,支持行缓存(比MySQL本身缓存效率高)与复制容错等。Vitess4.0中有许多改进,可以使新用户更容易使用,可以很容易的在k8s上部署Vitess,从单一的MySQL或MariaDB迁移到Vitess成为可能,而应用对此有所感知。

CockroachDB(免费)

CockroachDB(蟑螂数据库)是一个可伸缩的、支持地理位置处理、支持事务处理的数据存储系统。CockroachDB提供两种不同的的事务特性,包括快照隔离(snapshotisolation,简称SI)和顺序的快照隔离(SSI)语义,后者是默认的隔离级别。

蟑螂是一个分布式的K/V数据仓库,支持ACID事务,多版本值存储是其首要特性。主要的设计目标是全球一致性和可靠性,从蟑螂的命名上是就能看出这点。蟑螂数据库能处理磁盘、物理机器、机架甚至数据中心失效情况下最小延迟的服务中断;整个失效过程无需人工干预。蟑螂的节点是均衡的,其设计目标是同质部署(只有一个二进制包)且最小配置。CockroachDB无需重新配置,也无需进行大规模的架构大修就可以水平扩展,只需在集群中添加一个新节点就可以了,CockroachDB就会处理底层的复杂性。

只需向集群添加新节点即可进行扩展

自动平衡和分配分段的范围,不是分片

在所有节点上均匀地优化,以提升服务器利用率

TiDB(企业版收费)

TiDB是一款定位于在线事务处理/在线分析处理(HTAP:HybridTransactional/AnalyticalProcessing)的融合型数据库产品,实现了一键水平伸缩,强一致性的多副本数据安全,分布式事务,实时OLAP等重要特性。同时兼容MySQL协议和生态,迁移便捷,运维成本极低。但是从使用情况来看,它对硬件要求较高。目前也分社区版和企业版。

ClustrixDB(收费)

MariaDB年收购了ClustrixDB,它目前是一个类MYSQL的关系数据库,可以很容易的从MySQL迁移到ClustrixDB。ClustrixDB与MySQL客户机兼容,但与mazonAurora不同,它是分布式的,可以扩展写操作,并且不会产生单独的IO和存储费用,它从底层就支持web、移动和物联网(IoT)等具有最极端的可扩展性要求的应用程序,并且是在不损害关键特性的情况下做到这一点,数据库需要为带有关键型任务应用程序提供对可靠数据访问服务:事务和SQL。

MemSQL(收费)

MemSQL最大的卖点就是性能,同时兼容兼容MySQL。MemSQL,年12月14日发布,是世界上最快的关系数据库,能实现每秒万次事务。MemSQL是一个分布式的、高度可伸缩的SQL数据库,可以在任何地方运行。我们使用熟悉的关系模型为事务性和分析性工作负载提供最高性能.MemSQL是一个可扩展的SQL数据库,它不断地吸收数据,为您的业务一线执行操作分析。使用ACID事务每秒接收数百万个事件,同时以关系SQL、JSON、地理空间和全文搜索格式分析数十亿行数据。

NuoDB(商用需要授权)

NuoDB是世界上首个也是唯一一个具有专利的、弹性可伸缩的SQL关系数据库,主要用于去集中化的计算资源。我们完全从头开始设计这么一个全新的数据库,%ACID保证以及兼容SQL标准规范。支持复杂数据库管理任务如分区、缓存集群和性能调优等等。

Altibase(商用收费)

ALTIBASE数据库完美结合了,并提出了一个新概念---HybridDBMS。ALTIBASE提供高性能、容错能力和事务管理的方便性,特别是在通信、网上银行、证券交易、实时应用和嵌入式系统领域。

VoltDB(商用收费)

VoltDB是一个内存中的开源OLTPSQL数据库,能够保证事务的完整性(ACID)。它是Postgres和Ingres联合创始人MikeStonebraker领导开发的下一代开源数据库管理系统。它能在现有的廉价服务器集群上实现每秒数百万次数据处理。VoltDB大幅降低了服务器资源开销,单节点每秒数据处理远远高于其它数据库管理系统。不同于NoSQL的key-value储存,VoltDB能使用SQL存取,支持传统数据库的ACID模型。VoltDB代码采用GPLv3授权,支持订阅费用从15,美元起步。

Citus(商用收费)

Citus面向高速简单的事务,高吞吐量批量加载以及高速亚秒级分析查询。它还集成了cstore/hll等很多插件。一个限制是在某些情况下它不支持所有SQL查询或复杂事务。CitusDB采用PostgreSQL的插件形式(notafork),即享受PostgreSQL的强大支持,又同时拥有分布式数据库能力。Citus的企业版是要收费的。

2、K-V数据库之Redis

命令表:

1
查看完整版本: Redis初启一