目录
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应用广泛 | 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
| P276
|
缺点 | 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中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留 | 更新操作会用最新的当前值去替换记录中原来的旧值,旧值被覆盖后就不会存在 |
可伸缩性 | 列族是固定的,列不是固定的 实现灵活的水平扩展而开发的,能够轻易地通过在集群中增加或者减少硬件数量来实现性能的伸缩 | 列是固定的 关系数据库很难实现横向扩展,纵向扩展的空间也比较有限 |