本文的观点根据佐佐木达也著、罗勇译的《NoSQL数据库入门》一书提取并整理。
一、关系型数据库与NoSQL数据库的对比
不能否认关系型数据库的性能,其优势有:
1 保持数据一致性
2 数据更新开销小
3 可以进行join等复杂查询
4 技术成熟
不擅长处理:
1 大量数据的写入处理
(主从模式:主数据库负责写入数据,从数据库负责读数据)
二元主数据库:相同数据在两台数据库同时更新成其它值可能造成数据不一致
数据库分割:分别存储在不同服务器上的表之间无法进行join操作,除非在程序中进行关联
2 为有数据更新的表做索引或表结构变更
会对表进行共享锁定,导致不能增删改
3 字段不固定时应用
4 对简单查询需要快速返回结果的处理
NoSQL数据库只应用在特定领域,基本不进行复杂的处理
为了进行Join操作,关系型数据库不得不把数据存储在同一个服务器内
NoSQL原本就不支持Join操作,数据可以分散在多个服务器上,读入和写入操作相对容易
不对大量数据进行处理的话就没有使用NoSQL的必要吗?否。
希望顺畅地对数据进行缓存处理
希望对数组类型的数据进行告诉处理
希望进行全部保存
二、NoSQL数据库概念
1 键值存储:基本上只能通过键的完全一致查询获取数据。
临时性键值存储:如memcached,在内存中保存数据,速度快,数据可能丢失。
永久性性键值存储:如Tokyo Tyrant\ Flare、ROMA等,在硬盘中保存数据,速度快(跟memcached没法比),数据不会丢失。
两者兼具:如Redis,周期性将内存数据写入硬盘。
2 面向文档: MongoDB, CouchDB,不定义表结构、与键值存储不同,可以通过复杂查询条件获取数据。
3 面向列: Cassandra, HBase, HyperTable,适用于对大量行少数列进行读取,多所有行的特定列进行同时更新;具有高扩展性。