2023年6月21日发(作者:)

数据库:简述对⾮关系型数据库(NoSQL)的认识1. 《》2. 《》3. 《》4. 《》5. 《》⼀、⾮关系型数据库的概念随着近些年技术⽅向的不断拓展,⼤量的NoSql数据库如MongoDB、Redis、Memcached出于简化数据库结构、避免冗余、影响性能的表连接、摒弃复杂分布式的⽬的被设计。NoSQL数据库指的是分布式的、⾮关系型的、不保证遵循ACID原则的数据存储系统。NoSQL数据库技术与CAP理论、⼀致性哈希算法有密切关系。所谓CAP理论,简单来说就是⼀个分布式系统不可能满⾜可⽤性、⼀致性与分区容错性这三个要求,⼀次性满⾜两种要求是该系统的上限。⽽⼀致性哈希算法则指的是NoSQL数据库在应⽤过程中,为满⾜⼯作需求⽽在通常情况下产⽣的⼀种数据算法,该算法能有效解决⼯作⽅⾯的诸多问题但也存在弊端,即⼯作完成质量会随着节点的变化⽽产⽣波动,当节点过多时,相关⼯作结果就⽆法那么准确。这⼀问题使整个系统的⼯作效率受到影响,导致整个数据库系统的数据乱码与出错率⼤⼤提⾼,甚⾄会出现数据节点的内容迁移,产⽣错误的代码信息。但尽管如此,NoSQL数据库技术还是具有⾮常明显的应⽤优势,如数据库结构相对简单,在⼤数据量下的读写性能好;能满⾜随时存储⾃定义数据格式需求,⾮常适⽤于⼤数据处理⼯作。NoSQL数据库适合追求速度和可扩展性、业务多变的应⽤场景。 对于⾮结构化数据的处理更合适,如⽂章、评论,这些数据如全⽂搜索、机器学习通常只⽤于模糊处理,并不需要像结构化数据⼀样,进⾏精确查询,⽽且这类数据的数据规模往往是海量的,数据规模的增长往往也是不可能预期的,⽽NoSQL数据库的扩展能⼒⼏乎也是⽆限的,所以NoSQL数据库可以很好的满⾜这⼀类数据的存储。⼆、⾮关系型数据库的存储⽅式NoSQL数据库利⽤key-value可以获取⼤量的⾮结构化数据,并且数据的获取效率很⾼,但⽤它查询结构化数据效果就⽐较差。⽬前NoSQL数据库仍然没有⼀个统⼀的标准,它现在有四种⼤的分类:(1) 键值对存储(key-value):代表软件Redis,它的优点能够进⾏数据的快速查询,⽽缺点是需要存储数据之间的关系。(2) 列存储:代表软件Hbase,它的优点是对数据能快速查询,数据存储的扩展性强。⽽缺点是数据库的功能有局限性。(3) ⽂档数据库存储:代表软件MongoDB,它的优点是对数据结构要求不特别的严格。⽽缺点是查询性的性能不好,同时缺少⼀种统⼀查询语⾔。(4) 图形数据库存储:代表软件InfoGrid,它的优点可以⽅便的利⽤图结构相关算法进⾏计算。⽽缺点是要想得到结果必须进⾏整个图的计算,⽽且遇到不适合的数据模型时,图形数据库很难使⽤。存储⽅式键值对存储(l临时)键值对存储(永久)列存储⽂档数据库存储图形数据库存储Memcached,RedisRedis,Flare,Tokyo TyrantHbase,CassandraMongoDB,CouchDBInfoGrid三、主流⾮关系型数据库的讲解3.1 MongoDBMongoDB 是⼀个⾼性能,开源,⽆模式的⽂档型数据库,开发语⾔是C++。它在许多场景下可⽤于替代统的关系型数据库或键/值存储⽅式。1. MongoDB特点01)所⽤语⾔:C++02)特点:保留了SQL⼀些友好的特性(查询,索引)。03)使⽤许可: AGPL(发起者: Apache)04)协议: Custom, binary( BSON)05)Master/slave复制(⽀持⾃动错误恢复,使⽤ sets 复制)06)内建分⽚机制07)⽀持 javascript表达式查询08)可在服务器端执⾏任意的 javascript函数09)update-in-place⽀持⽐CouchDB更好10)在数据存储时采⽤内存到⽂件映射11)对性能的关注超过对功能的要求12)建议最好打开⽇志功能(参数 --journal)13)在32位操作系统上,数据库⼤⼩限制在约2.5Gb14)空数据库⼤约占 192Mb15)采⽤ GridFS存储⼤数据或元数据(不是真正的⽂件系统)2. MongoDB优点01)更⾼的写负载,MongoDB拥有更⾼的插⼊速度。02)处理很⼤的规模的单表,当数据表太⼤的时候可以很容易的分割表。03)⾼可⽤性,设置M-S不仅⽅便⽽且很快,MongoDB还可以快速、安全及⾃动化的实现节点 (数据中⼼)故障转移。04)快速的查询,MongoDB⽀持⼆维空间索引,⽐如管道,因此可以快速及精确的从指定位置 获取数据。MongoDB在启动后会将数据库中的数据以⽂件映射的⽅式加载到内存中。如果内 存资源相当丰富的话,这将极⼤地提⾼数据库的查询速度。05)⾮结构化数据的爆发增长,增加列在有些情况下可能锁定整个数据库,或者增加负载从⽽ 导致性能下降,由于MongoDB的弱数据结构模式,添加1个新字段不会对旧表格有任何影响, 整个过程会⾮常快速。3. MongoDB缺点:01)前期不⽀持事务,MongoDB 4.x后⽀持。02)MongoDB占⽤空间过⼤ 。03)MongoDB没有成熟的维护⼯具。4. MongoDB应⽤场景01)适⽤于实时的插⼊、更新与查询的需求,并具备应⽤程序实时数据存储所需的复制及⾼度伸缩性;02)⾮常适合⽂档化格式的存储及查询;03)⾼伸缩性的场景:MongoDB ⾮常适合由数⼗或者数百台服务器组成的数据库。04)对性能的关注超过对功能的要求。3.2 HBaseHBase 是 Apache Hadoop 中的⼀个⼦项⽬,属于 bigtable 的开源版本,所实现的语⾔为Java(故依赖 Java SDK)。HBase 依托于Hadoop 的 HDFS(分布式⽂件系统)作为最基本存储基础单元。1. HBase 特点01)所⽤语⾔: Java02)特点:⽀持数⼗亿⾏X上百万列03)使⽤许可: Apache04)协议:HTTP/REST (⽀持 Thrift,见编注4)05)在 BigTable之后建模06)采⽤分布式架构 Map/reduce07)对实时查询进⾏优化08)⾼性能 Thrift⽹关09)通过在server端扫描及过滤实现对查询操作预判10)⽀持 XML, Protobuf, 和binary的HTTP11)Cascading, hive, and pig source and sink modules12)基于 Jruby( JIRB)的shell13)对配置改变和较⼩的升级都会重新回滚14)不会出现单点故障15)堪⽐MySQL的随机访问性能2. HBase 优点01) 存储容量⼤,⼀个表可以容纳上亿⾏,上百万列;02)可通过版本进⾏检索,能搜到所需的历史版本数据;03)负载⾼时,可通过简单的添加机器来实现⽔平切分扩展,跟Hadoop的⽆缝集成保障了其数据可靠性(HDFS)和海量数据分析的⾼性能(MapReduce);04)在第3点的基础上可有效避免单点故障的发⽣。3. HBase 缺点01)基于Java语⾔实现及Hadoop架构意味着其API更适⽤于Java项⽬;02)node开发环境下所需依赖项较多、配置⿇烦(或不知如何配置,如持久化配置),缺乏⽂档;03)占⽤内存很⼤,且鉴于建⽴在为批量分析⽽优化的HDFS上,导致读取性能不⾼;04)API相⽐其它 NoSql 的相对笨拙。4. HBase 适⽤场景01)bigtable类型的数据存储;02)对数据有版本查询需求;03)应对超⼤数据量要求扩展简单的需求。3.3RedisRedis 是⼀个开源的使⽤ANSI C语⾔编写、⽀持⽹络、可基于内存亦可持久化的⽇志型、Key-Value数据库,并提供多种语⾔的API。⽬前由VMware主持开发⼯作。1. Redis 特点01)所⽤语⾔:C/C++02)特点:运⾏异常快03)使⽤许可: BSD04)协议:类 Telnet05)有硬盘存储⽀持的内存数据库,但⾃2.0版本以后可以将数据交换到硬盘(注意, 2.4以后版本不⽀持该特性!)06)Master-slave复制07)虽然采⽤简单数据或以键值索引的哈希表,但也⽀持复杂操作08)INCR & co (适合计算极限值或统计数据)09)⽀持 sets(同时也⽀持 union/diff/inter)10)⽀持列表(同时也⽀持队列;阻塞式 pop操作)11)⽀持哈希表(带有多个域的对象)12)⽀持排序 sets(⾼得分表,适⽤于范围查询)13)Redis⽀持事务14)⽀持将数据设置成过期数据(类似快速缓冲区设计)15)Pub/Sub允许⽤户实现消息机制2. Redis 优势01)⾮常丰富的数据结构;02)Redis提供了事务的功能,可以保证⼀串 命令的原⼦性,中间不会被任何操作打断;03)数据存在内存中,读写⾮常的⾼速,可以达到10w/s的频率。3. Redis 缺点01) Redis3.0后才出来官⽅的集群⽅案,但仍存在⼀些架构上的问题;02)持久化功能体验不佳——通过快照⽅法实现的话,需要每隔⼀段时间将整个数据库的数据写到磁盘上,代价⾮常⾼;⽽aof⽅法只追踪变化的数据,类似于mysql的binlog⽅法,但追加log可能过⼤,同时所有操作均要重新执⾏⼀遍,恢复速度慢;03)由于是内存数据库,所以,单台机器,存储的数据量,跟机器本⾝的内存⼤⼩。虽然redis本⾝有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。4. Redis 应⽤场景最佳应⽤场景:适⽤于数据变化快且数据库⼤⼩可预见(适合内存容量)的应⽤程序。例如:微博、数据分析、实时数据搜集、实时通讯等。

2023年6月21日发(作者:)

数据库:简述对⾮关系型数据库(NoSQL)的认识1. 《》2. 《》3. 《》4. 《》5. 《》⼀、⾮关系型数据库的概念随着近些年技术⽅向的不断拓展,⼤量的NoSql数据库如MongoDB、Redis、Memcached出于简化数据库结构、避免冗余、影响性能的表连接、摒弃复杂分布式的⽬的被设计。NoSQL数据库指的是分布式的、⾮关系型的、不保证遵循ACID原则的数据存储系统。NoSQL数据库技术与CAP理论、⼀致性哈希算法有密切关系。所谓CAP理论,简单来说就是⼀个分布式系统不可能满⾜可⽤性、⼀致性与分区容错性这三个要求,⼀次性满⾜两种要求是该系统的上限。⽽⼀致性哈希算法则指的是NoSQL数据库在应⽤过程中,为满⾜⼯作需求⽽在通常情况下产⽣的⼀种数据算法,该算法能有效解决⼯作⽅⾯的诸多问题但也存在弊端,即⼯作完成质量会随着节点的变化⽽产⽣波动,当节点过多时,相关⼯作结果就⽆法那么准确。这⼀问题使整个系统的⼯作效率受到影响,导致整个数据库系统的数据乱码与出错率⼤⼤提⾼,甚⾄会出现数据节点的内容迁移,产⽣错误的代码信息。但尽管如此,NoSQL数据库技术还是具有⾮常明显的应⽤优势,如数据库结构相对简单,在⼤数据量下的读写性能好;能满⾜随时存储⾃定义数据格式需求,⾮常适⽤于⼤数据处理⼯作。NoSQL数据库适合追求速度和可扩展性、业务多变的应⽤场景。 对于⾮结构化数据的处理更合适,如⽂章、评论,这些数据如全⽂搜索、机器学习通常只⽤于模糊处理,并不需要像结构化数据⼀样,进⾏精确查询,⽽且这类数据的数据规模往往是海量的,数据规模的增长往往也是不可能预期的,⽽NoSQL数据库的扩展能⼒⼏乎也是⽆限的,所以NoSQL数据库可以很好的满⾜这⼀类数据的存储。⼆、⾮关系型数据库的存储⽅式NoSQL数据库利⽤key-value可以获取⼤量的⾮结构化数据,并且数据的获取效率很⾼,但⽤它查询结构化数据效果就⽐较差。⽬前NoSQL数据库仍然没有⼀个统⼀的标准,它现在有四种⼤的分类:(1) 键值对存储(key-value):代表软件Redis,它的优点能够进⾏数据的快速查询,⽽缺点是需要存储数据之间的关系。(2) 列存储:代表软件Hbase,它的优点是对数据能快速查询,数据存储的扩展性强。⽽缺点是数据库的功能有局限性。(3) ⽂档数据库存储:代表软件MongoDB,它的优点是对数据结构要求不特别的严格。⽽缺点是查询性的性能不好,同时缺少⼀种统⼀查询语⾔。(4) 图形数据库存储:代表软件InfoGrid,它的优点可以⽅便的利⽤图结构相关算法进⾏计算。⽽缺点是要想得到结果必须进⾏整个图的计算,⽽且遇到不适合的数据模型时,图形数据库很难使⽤。存储⽅式键值对存储(l临时)键值对存储(永久)列存储⽂档数据库存储图形数据库存储Memcached,RedisRedis,Flare,Tokyo TyrantHbase,CassandraMongoDB,CouchDBInfoGrid三、主流⾮关系型数据库的讲解3.1 MongoDBMongoDB 是⼀个⾼性能,开源,⽆模式的⽂档型数据库,开发语⾔是C++。它在许多场景下可⽤于替代统的关系型数据库或键/值存储⽅式。1. MongoDB特点01)所⽤语⾔:C++02)特点:保留了SQL⼀些友好的特性(查询,索引)。03)使⽤许可: AGPL(发起者: Apache)04)协议: Custom, binary( BSON)05)Master/slave复制(⽀持⾃动错误恢复,使⽤ sets 复制)06)内建分⽚机制07)⽀持 javascript表达式查询08)可在服务器端执⾏任意的 javascript函数09)update-in-place⽀持⽐CouchDB更好10)在数据存储时采⽤内存到⽂件映射11)对性能的关注超过对功能的要求12)建议最好打开⽇志功能(参数 --journal)13)在32位操作系统上,数据库⼤⼩限制在约2.5Gb14)空数据库⼤约占 192Mb15)采⽤ GridFS存储⼤数据或元数据(不是真正的⽂件系统)2. MongoDB优点01)更⾼的写负载,MongoDB拥有更⾼的插⼊速度。02)处理很⼤的规模的单表,当数据表太⼤的时候可以很容易的分割表。03)⾼可⽤性,设置M-S不仅⽅便⽽且很快,MongoDB还可以快速、安全及⾃动化的实现节点 (数据中⼼)故障转移。04)快速的查询,MongoDB⽀持⼆维空间索引,⽐如管道,因此可以快速及精确的从指定位置 获取数据。MongoDB在启动后会将数据库中的数据以⽂件映射的⽅式加载到内存中。如果内 存资源相当丰富的话,这将极⼤地提⾼数据库的查询速度。05)⾮结构化数据的爆发增长,增加列在有些情况下可能锁定整个数据库,或者增加负载从⽽ 导致性能下降,由于MongoDB的弱数据结构模式,添加1个新字段不会对旧表格有任何影响, 整个过程会⾮常快速。3. MongoDB缺点:01)前期不⽀持事务,MongoDB 4.x后⽀持。02)MongoDB占⽤空间过⼤ 。03)MongoDB没有成熟的维护⼯具。4. MongoDB应⽤场景01)适⽤于实时的插⼊、更新与查询的需求,并具备应⽤程序实时数据存储所需的复制及⾼度伸缩性;02)⾮常适合⽂档化格式的存储及查询;03)⾼伸缩性的场景:MongoDB ⾮常适合由数⼗或者数百台服务器组成的数据库。04)对性能的关注超过对功能的要求。3.2 HBaseHBase 是 Apache Hadoop 中的⼀个⼦项⽬,属于 bigtable 的开源版本,所实现的语⾔为Java(故依赖 Java SDK)。HBase 依托于Hadoop 的 HDFS(分布式⽂件系统)作为最基本存储基础单元。1. HBase 特点01)所⽤语⾔: Java02)特点:⽀持数⼗亿⾏X上百万列03)使⽤许可: Apache04)协议:HTTP/REST (⽀持 Thrift,见编注4)05)在 BigTable之后建模06)采⽤分布式架构 Map/reduce07)对实时查询进⾏优化08)⾼性能 Thrift⽹关09)通过在server端扫描及过滤实现对查询操作预判10)⽀持 XML, Protobuf, 和binary的HTTP11)Cascading, hive, and pig source and sink modules12)基于 Jruby( JIRB)的shell13)对配置改变和较⼩的升级都会重新回滚14)不会出现单点故障15)堪⽐MySQL的随机访问性能2. HBase 优点01) 存储容量⼤,⼀个表可以容纳上亿⾏,上百万列;02)可通过版本进⾏检索,能搜到所需的历史版本数据;03)负载⾼时,可通过简单的添加机器来实现⽔平切分扩展,跟Hadoop的⽆缝集成保障了其数据可靠性(HDFS)和海量数据分析的⾼性能(MapReduce);04)在第3点的基础上可有效避免单点故障的发⽣。3. HBase 缺点01)基于Java语⾔实现及Hadoop架构意味着其API更适⽤于Java项⽬;02)node开发环境下所需依赖项较多、配置⿇烦(或不知如何配置,如持久化配置),缺乏⽂档;03)占⽤内存很⼤,且鉴于建⽴在为批量分析⽽优化的HDFS上,导致读取性能不⾼;04)API相⽐其它 NoSql 的相对笨拙。4. HBase 适⽤场景01)bigtable类型的数据存储;02)对数据有版本查询需求;03)应对超⼤数据量要求扩展简单的需求。3.3RedisRedis 是⼀个开源的使⽤ANSI C语⾔编写、⽀持⽹络、可基于内存亦可持久化的⽇志型、Key-Value数据库,并提供多种语⾔的API。⽬前由VMware主持开发⼯作。1. Redis 特点01)所⽤语⾔:C/C++02)特点:运⾏异常快03)使⽤许可: BSD04)协议:类 Telnet05)有硬盘存储⽀持的内存数据库,但⾃2.0版本以后可以将数据交换到硬盘(注意, 2.4以后版本不⽀持该特性!)06)Master-slave复制07)虽然采⽤简单数据或以键值索引的哈希表,但也⽀持复杂操作08)INCR & co (适合计算极限值或统计数据)09)⽀持 sets(同时也⽀持 union/diff/inter)10)⽀持列表(同时也⽀持队列;阻塞式 pop操作)11)⽀持哈希表(带有多个域的对象)12)⽀持排序 sets(⾼得分表,适⽤于范围查询)13)Redis⽀持事务14)⽀持将数据设置成过期数据(类似快速缓冲区设计)15)Pub/Sub允许⽤户实现消息机制2. Redis 优势01)⾮常丰富的数据结构;02)Redis提供了事务的功能,可以保证⼀串 命令的原⼦性,中间不会被任何操作打断;03)数据存在内存中,读写⾮常的⾼速,可以达到10w/s的频率。3. Redis 缺点01) Redis3.0后才出来官⽅的集群⽅案,但仍存在⼀些架构上的问题;02)持久化功能体验不佳——通过快照⽅法实现的话,需要每隔⼀段时间将整个数据库的数据写到磁盘上,代价⾮常⾼;⽽aof⽅法只追踪变化的数据,类似于mysql的binlog⽅法,但追加log可能过⼤,同时所有操作均要重新执⾏⼀遍,恢复速度慢;03)由于是内存数据库,所以,单台机器,存储的数据量,跟机器本⾝的内存⼤⼩。虽然redis本⾝有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。4. Redis 应⽤场景最佳应⽤场景:适⽤于数据变化快且数据库⼤⼩可预见(适合内存容量)的应⽤程序。例如:微博、数据分析、实时数据搜集、实时通讯等。