技术发展
技术的分类
1、解决功能性的问题:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN
2、解决扩展性的问题:Struts、Spring、SpringMVC、Hibernate、Mybatis 3、解决性能的问题:NoSQL、Java 线程、Hadoop、Nginx、MQ、ElasticSearch
Web1.0 时代
Web1.0 的时代,数据访问量很有限,用一夫当关的高性能的单点服务器可以 解决大部分问题。
Web2.0 时代
随着 Web2.0 的时代的到来,用户访问量大幅度提升,同时产生了大量的用户 数据。加上后来的智能移动设备的普及,所有的互联网平台都面临了巨大的性能挑战。
解决 CPU 及内存压力
解决 IO 压力
NoSQL 数据库
NoSQL 数据库概述
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是 SQL”,泛指非关系型的数据库。 NoSQL 不依赖业务逻辑方式存储,而以简单的 key-value 模式存储。因此大大的增加了 数据库的扩展能力。
不遵循 SQL 标准。
不支持 ACID。
远超于 SQL 的性能。
NoSQL 适用场景
对数据高并发的读写
海量数据的读写
对数据高可扩展性的
NoSQL 不适用场景
需要事务支持
基于 sql 的结构化查询存储,处理复杂的关系,需要即席查询。
(用不着 sql 的和用了 sql 也不行的情况,请考虑用 NoSql)
哪些数据库是NoSQL数据库?
Memcache
很早出现的 NoSql 数据库
数据都存储在内存中,一般不持久化 (不能存储在硬盘或者文件,只能存储在内存,关机了内存的数据就不存在了)
支持简单的 key-value 模式,支持类型单一
一般是作为缓存数据库辅助持久化的数据库(一般和MySQL等关系型数据库一起使用)
Redis
几乎覆盖了 Memcached 的绝大部分功能
数据都在内存中,支持持久化(数据可以存储到硬盘),主要用作备份恢复
除了支持简单的 key-value 模式,还支持多种数据结构 的存储,比如 list、set、hash、zset 等。
一般是作为缓存数据库辅助持久化的数据库(一般和MySQL等关系型数据库一起使用)
MongoDB
高性能、开源、模式自由(schema free)的文档型数据库 (存储结构和json类似,里面存储的数据形式多样,结构更加复杂)
数据都在内存中, 如果内存不足,把不常用的数据保存到硬盘
虽然是 key-value 模 式 , 但 是 对 value ( 尤 其 是 json)提供了丰富的查询功能
支持二进制数据及大型对象
可以根据数据的特点替代 RDBMS ,成为独立的数据库。或者配合 RDBMS,存储特定的数据。
行式存储数据库(大数据时代)
行式数据库
(把每行作为一部分数据结构进行存储)
列式数据库
Hbase
HBase 是 Hadoop 项目中的数据库。它用于需要对大量的数据进行随机、实时的读写 操作的场景中。
HBase 的目标就是处理数据量非常庞大的表,可以用普通的计算机处理超过 10 亿行数 据,还可处理有数百万列元素的数据表。
Cassandra[kəˈsændrə]
Apache Cassandra 是一款免费的开源 NoSQL 数据库,其设计目的在于管理由大量商 用服务器构建起来的庞大集群上的海量数据集(数据量通常达到 PB 级别)。在众多显著 特性当中,Cassandra 最为卓越的长处是对写入及读取操作进行规模调整,而且其不 强调主集群的设计思路能够以相对直观的方式简化各集群的创建与扩展流程。
图关系型数据库
主要应用:社会关系,公共交通网络,地图及网络拓谱(n*(n-1)/2)
这些NoSQL数据库的目的都是为了提高性能!!!