SQL入门:
在说NoSQL之前先看看sql的发展,数据库的发展经过了无库时代,层次状数据库,网状数据库,关系性数据库,NoSQL数据库。
刚开始数据是直接写入到程序中,并没有数据库的概念,随着数据量的增长,开始出现层次状数据库,程序通过树形结构访问数据,在这种结构下父记录同时拥有多个子记录,但子记录只有一个父记录,造成的问题是一旦数据增多,数据量增大,会出现数据冗余的状况:
之后针对这种冗余出现了网状数据库,同层次数据库一致,对于数据结构有很强的依赖性,不理解数据结构无法访问对应的内容:
之后关系型数据库开始出现,1970年Codd划时代的论文《用于大型共享数据库的关系数据模型》,关系型数据库通过把所有的数据都通过行和列的二元表现形式表示出来,给人更容易理解的直观感受。关系型数据库的优势:保持数据的一致性,以标准化为前提,数据的更新的开销很小,可以使用连接等复杂查询,拥有许多实际成果。
关系型数据库产品的关键技术在于存储引擎,索引设计,SQL优化器,事务管理与并发控制,容灾与恢复技术。在关系型数据库中,数据存储在数据文件中,数据文件由块与页组成,快内包括块头与数据区。
关系型数据库的缺点:很难进行分布式存储,由于按行存储,在读取数据的过程中,按行读取,浪费大量io资源,并且难以处理非结构化的数据。
CAP定律:
CAP( Consistency,Availability,Patition tolerance)理论论述的是在任何分布式系统中,只可能满足一致性,可用性及分区容忍性三者中的两者,不可能全部都满足。所以不用花时间精力在如何满足所有三者上面。CAP理论进一步导致了技术趋势由关系数据库系统向NoSQL发展。
NoSQL=Not Only SQL,它并不意味着非sql,而是不仅sql,它们大多开源,并且对于分布式集群有着良好的支持,只能解决特定的场景下的问题,缺乏统一解决方案。
满足cp:
BigTable (column-oriented/tabular) Hypertable (column-oriented/tabular) ? HBase (column-oriented/tabular) ? MongoDB (document-oriented) ? Terrastore (document-oriented) ? Redis (key-value) ? Scalaris (key-value) ? MemcacheDB (key-value) ? Berkeley DB (key-value)
满足ap:
Dynamo (key-value) ? Voldemort (key-value) ? Tokyo Cabinet (key-value) ? KAI (key-value) ? Cassandra (column-oriented/tabular) ? CouchDB (document-oriented) ? SimpleDB (document-oriented) ? Riak (document-oriented)
常见的NoSQL:
Redis:2009年Salvatore为其公司LLOOGG开发的基于键值对的数据库系统,使用C实现,BSD许可证,拥有丰富的数据类型,非常适合需要表达时间线的web服务,github在使用。
HBase:是一个分布式的,面向列的开源数据库,来自google的bigtable论文,HBase时Apache下Hadoop的子项目,目前刚刚出来1.0版本,非常适合非结构化的数据。
MongoDB:创建于10gen,使用C++实现,是一个面向文档的数据库。可以处理非结构化数据,支持全文索引,目前已发布3.0.