nosql一些知识点~mongoDB,redis,HBase三种数据库对比

目录

Nosql三种数据库对比

Redis中操作

传统关系数据库与hbase分布式数据库区别


Nosql三种数据库对比

mongoDB

redis

HBase

相似性

根据CAP分布式理论,三者都是CP型分布式数据库,能够保证数据的强一致性和分区容忍性

编写语言

C++

C语言

Java

类型

文档存储数据库

键值对存储数据库

列式存储数据库

端口号

27017

用mongod.exe启动

6379

用redis-server.exe启动

其他方面

面向集合、模式自由、水平扩展

支持二级索引

开源高性能,键值对存储

不支持二级索引

读写性能高

基于Java开源的

高可靠、高性能

面向列、可伸缩

不支持二级索引

极强的横向(存储容量)扩展能力

数据存储

存储在硬盘经常读取的数据会被加载到内存中。将数据存储在物理内存中,从而达到高速读写 非结构化数据

全部存在内存,定期写入磁盘

当内存不够时,可以选择指定的LRU算法删除数据

非结构化数据

以storefile (HFile)二进制流的形式存储在HDFS上block块中

非结构化数据与结构化数据

特点

  1. 易用性
  2. 高性能
  3. 高可用性
  4. 易扩展性
  5. 支持多种存储引擎

1读写速度快

2支持多种数据结构

3功能丰富

4应用广泛

1、海量存储

2、面向列

3、多版本

4、稀疏性

5、易扩展性

6、高可靠性

应用场景

1、事件的记录

2、内容管理

3、博客平台等

可以通过副本集,以及分片来实现高可用

1、缓存

2、排行榜

3、过期数据自动清理

4、构建队列系统

5、计数器

6、实时反垃圾系统

P206

1、对象存储P274

2、时序数据

3、推荐画像

4、时空数据

5、Cube分析

6、消息订单存储

7、社交Feeds流

体系结构、数据类型

层次结构:P15

1、数据库

2、集合

3、文档

数据类型P209

  1. 字符串String
  2. 队列list
  3. 集合 set
  4. 哈希hash
  5. 有序集合sorted sets

P276

  1. 行键
  2. 列族
  3. 时间戳(HBase带时间戳,数据追加,不删除)

缺点

1、无事务机制

2、MongoDB占用空间过大

3、MongoDB没有成熟的维护工具

支持事物,比较弱

1)但仍存在一些架构上的问题;

2)持久化功能体验不佳——通过快照方法实现的话,需要每隔一段时间将整个数据库的数据写到磁盘上,代价非常高;

3)由于是内存数据库,虽然redis本身有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。

1. 基于Java语言实现及Hadoop架构意味着其API更适用于Java项目;

2. node开发环境下所需依赖项较多、配置麻烦,缺乏文档;

3. 占用内存很大,且鉴于建立在为批量分析而优化的HDFS上,导致读取性能不高;

4. API相比其它 NoSql 的相对笨拙。

Redis中操作

String字符串

List列表

Set集合

Hash哈希

Sorted sets有序集合

有序无序

最基本最简单的数据结构值是二进制的

有序

无序

无序

有序

按照值进行自动排序

读写操作

读写只能从头或者尾来操作

读写可以是任意位置

重复问题

最大长度不超过512M

允许出现重复

不允许重复

字符串唯一

值不允许重复

键唯一,只可以重复

Key键类型

数据类型可以为数字、文本、图片、视频或者序列化对象

必须是字符串

传统关系数据库与hbase分布式数据库区别

hbase分布式数据库

传统关系数据库

数据类型

表字段的数据不做限制

数据存储为未经解释的字符串

表字段的数据不能超过30个

采用关系模型,具有丰富的数据类型和存储方式

数据操作

不存在复杂的表与表之间的关系,只有简单的插入、查询、删除、清空

HBase在设计上就避免了复杂的表和表之间的关系

包含了丰富的操作,其中会涉及复杂的多表连接

存储模式

基于列模式存储

每个列族都由几个文件保存,不同列族的文件是分离的

基于行模式存储

数据索引

只有一个索引——行键

通过巧妙的设计,HBase中的所有访问方法,或者通过行键访问,或者通过行键扫描,从而使得整个系统不会慢下来。

可以针对不同列构建复杂的多个索引,以提高数据访问性能

数据维护

HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留

更新操作会用最新的当前值去替换记录中原来的旧值,旧值被覆盖后就不会存在

可伸缩性

列族是固定的,列不是固定的

实现灵活的水平扩展而开发的,能够轻易地通过在集群中增加或者减少硬件数量来实现性能的伸缩

列是固定的

关系数据库很难实现横向扩展,纵向扩展的空间也比较有限

你可能感兴趣的:(nosql,nosql,mongodb,redis,数据库)