最近有时间可以静下来慢慢总结一些技术,先说说NoSql。
数据层的作用:
数据的存储和读取、修改、删除
ACID模型的支持
需要考虑的技术点:
ACID
易用性
批量数据统计
水平扩展性
数据模型的复杂度
IO效率
NOSQL快读发展原因:
NOSQL是非关系型数据存储机制,简化了数据结构和之间的关系。主要是互联网技术对于性能和高并发量的要求下推出的。
传统的关系数据库具有不错的性能,高稳定型,久经历史考验,而且使用简单,功能强大,互联网技术主推Mysql。但是随着互联网技术的快读发展,系统地访问量急剧上升,几乎大部分使用传统数据库(主要是MySQL)架构的网站在数据库上都开始出现了性能问题,web程序不再仅仅专注在功能上,同时也在追求性能。程序员们开始大量的使用缓存技术来缓解数据库的压力,优化数据库的结构和索引。开始比较流行的是通过文件缓存来缓解数据库压力,但是当访问量继续增大的时候,多台web机器通过文件缓存不能共享,大量的小文件缓存也带了了比较高的IO压力。
解决思路:读写分离(MemCached+mysql)--〉分区分库--〉关系数据库特性无法提供更好的水平扩展性;数据存储结构修改的巨大代价;大数据IO压力大;高性能数据库对于技术人员的高要求---〉无路?
NoSql 技术应运而生。
Nosql 技术主要实现功能:
1、通过Key-value (单值、复合值)模式存储数据;
2、良好水平扩展性
3、使用内存而非文件存储实时使用数据来加快读写
附加功能:
一致性(复制和同步)、持久化(快照和日志)
选择考虑点:
是否需要多线程;
需要缓存的数据类型
缓存的数据类型大小及分类,变化频率
数据一致性问题 (复制和同步)
客户端API
产品成熟度
其他功能(简单的统计、查询)是否支持 (个人建议,如果这个要求比较多,当前不需要考虑Nosql,以后图论技术如果发展到一定程度,可能可以解决)
当前最流行类型:
键值存储数据库(Redis, Memcached)
列存储数据库(Hbase, Cassandra)
文档型数据库(MongoDB)
图形数据库(Neo4j)
趋势:
功能专业化,大致分为缓存数据库(键值存储)、专用数据库(文档、图形。。。。。)、分布式数据库(弱关系型和强关系型)、文件系统数据库(HFS\GFS)
数据库多样化,一个应用可能会采用1~2类数据库产品
.......
N 年后,硬件技术突破,强关系型数据库重新回归。
知识汇总:http://tech.it168.com/topic/2011/10-1/nosqlapp/index.html
NoSQL在云计算中的应用.pdf http://wenku.it168.com/d_000043571.shtml
Redis学习笔记 http://wenku.it168.com/d_000053836.shtml