1.2 NoSQL数据库
NoSQL官网(http://nosql-database.org/)上竟然有一百多种!还有图形数据库和对象数据库等各个类别!!介绍下具有代表性的NoSQL数据库。
1.2.1键值存储
最常见的NoSQL数据库,是以键值的形式存储的。虽然它的处理速度非常快,但基本上只能通过键的完全一致查询获取数据。根据
数据的保存方式可以分为临时性、永久性和两者兼具3种。
临时性
Memcached属于这种类型。memcached把所有数据都保存在内存中,这样保存和读取的速度非常快,但是当memcached停止的时候,数据就不存在了。由于数据保存在内存中,所以无法操作超出内存容量的数据(旧数据会丢失)。
永久性
Tokyo Tyrant、Flare、ROMA等属于这种类型。键值存储保存在硬盘上,性能上非常快速,但比起memcached是有差距的,但是数据不会丢失是它最大的优势。
临时/永久性
Redis属于这种类型。Redis首先把数据保存到内存中,在满足特定条件(默认是15分钟一次以上,5分钟内10个以上,1分钟内10000个以上的键发生变更)的时候,将数据写入到硬盘中。特别适合于处理数组类型的数据。
1.2.2面向文档的数据库
MongoDB、CouchDB属于这种类型,非常容易使用的NoSQL数据库。
1)不定义表结构
即使不定义表结构,也可以像定义了表结构一样使用。关系型数据库在变更表结构时比较费事,且未保一致性还需修改程序。然而NoSQL数据库则可以省去这些麻烦(通常程序都是正确的)。
2)可以使用复杂的查询条件
与键值存储相比,可以通过复杂的查询条件来获取数据。虽然不具备事务处理和JION的处理能力,但除此以外的其它处理基本都能实现。
1.2.3面向列的数据库
Cassandra、Hbase、HyperTable属于这种类型。数据量爆发性增长,这种类型的NoSQL尤其引人注目。
1)面向行的数据库与面向列的数据库
2)高扩展性
面向列的数据库具有高扩展性,即使数据增加也不会降低相应的处理速度(特别是写入速度),所以它主要应用于需要处理大量数据的情况。另外,利用面向列的数据库的优势,把它作为批处理程序的存储器来对大量数据进行更新也是非常有用的。
由于面向列的数据库跟现行数据库存储的思维方式有很大不同,应用起来十分困难。
1.3 如何导入NoSQL数据库
1.3.1始终只是其中一种选择
并非对立而是互补的关系;
量才适用 ---- 一定不要再关系型数据库擅长的领域适用NoSQL数据库;
增加了数据存储的方式。---- 除了关系型数据库不再别无选择,NoSQL数据库种类多,各有优势。
1.3.2在何种程度上信赖它
memcached已经相当地成熟,其它NoSQL数据库的应用过程中遇到问题的可能性还是存在的。实际应用的时候可以参考的经验、信息太少,所以虽然NoSQL数据库能带来很多便利,但是在应用的时候也要考虑这些风险。