现在的位置: 首页 > 综合 > 正文

NoSQL常见存储方式

2018年01月28日 ⁄ 综合 ⁄ 共 1089字 ⁄ 字号 评论关闭

参照:NoSQLデータベースファーストガイド

一、 键值存储
它的数据是以键值的形式存储的,虽然它的速度非常快,但基本上只能通过键的完全一致查询获取数据,根据数据的保存方式可以分为临时性、永久性和两者兼具三种。

(1)临时性(memcached)
      所谓临时性就是数据有可能丢失,memcached把所有数据都保存在内存中,这样保存和读取的速度非常快,但是当memcached停止时,数据就不存在了。由于数据保存在内存中,所以无法操作超出内存容量的数据,旧数据会丢失。
      总结来说:
      1、在内存中保存数据
      2、可以进行非常快速的保存和读取处理
      3、数据有可能丢失

(2)永久性(ROMA、Tokyo Tyrant、Flare)
      所谓永久性就是数据不会丢失,这里的键值存储是把数据保存在硬盘上,与临时性比起来,由于必然要发生对硬盘的IO操作,所以性能上还是有差距的,但数据不会丢失是它最大的优势。
      总结来说:
      1、在硬盘上保存数据
      2、可以进行非常快速的保存和读取处理(但无法与memcached相比)
      3、数据不会丢失

(3)两者兼备(Redis)
      Redis有些特殊,临时性和永久性兼具。Redis首先把数据保存在内存中,在满足特定条件(默认是 15分钟一次以上,5分钟内10个以上,1分钟内10000个以上的键发生变更)的时候将数据写入到硬盘中,这样既确保了内存中数据的处理速度,又可以通过写入硬盘来保证数据的永久性,这种类型的数据库特别适合处理数组类型的数据。
      总结来说:
      同时在内存和硬盘上保存数据
      1、可以进行非常快速的保存和读取处理
      2、保存在硬盘上的数据不会消失(可以恢复)
      3、适合于处理数组类型的数据

二、面向文档的数据库(MongoDB、CouchDB)
(1)不定义表结构
    即使不定义表结构,也可以像定义了表结构一样使用,还省去了变更表结构的麻烦。

(2)可以使用复杂的查询条件 
    跟键值存储不同的是,面向文档的数据库可以通过复杂的查询条件来获取数据,虽然不具备事务处理和Join这些关系型数据库所具有的处理能力,但初次以外的其他处理基本上都能实现。

三、 面向列的数据库(Cassandra、HBase、HyperTabl)

   由于近年来数据量出现爆发性增长,这种类型的NoSQL数据库尤其引入注目。

   普通的关系型数据库都是以行为单位来存储数据的,擅长以行为单位的读入处理,比如特定条件数据的获取。因此,关系型数据库也被成为面向行的数据库。相反,面向列的数据库是以列为单位来存储数据的,擅长以列为单位读入数据。

抱歉!评论已关闭.