数据库


数据库是按照一定数据结构所定义并且用来组织,管理,存储数据的仓库。大家熟悉的MySQL数据库。就是其中的关系型数据库。而像redis这种的又是非关系型数据库,这类技术被称之为NoSQL,还有新出现的一类数据库,NewSQL,NewSQL是不仅具有NoSQL对海量数据的存储管理能力,还保持了传统数据库对ACID和SQL特性的支持。


数据库行业真可谓百花齐放。



NoSQL是一种新型的技术。可以实现高吞吐量,不支持ACID数据库的设计范式。NoSQL没有统一的查询语言。






数据库中什么是关系型?什么是非关系型数据库呢?



关系型数据库中存储的数据都是有一定的关系的,如一个库,一张表,存储了名字:张三,年龄:20,性别:男。



这三个数据是有关系的,因为他们都是在描述同一个人。但是如果是Redis这种键值式数据库呢,只知道年龄20。至于这个年龄20是在说谁的年龄。Redis并不关心。如果是MongoDB这类的文档式数据库呢。名字,年龄,性别。这三个属性时一个整体,没错。但是,每个人都必须要记录名字,年龄,性别。而第二个人,李四,假如他多了一个属性,爱好,那么整个表都需要加这个属性吗?MongoDB不需要,文档与文档之间没有必然的联系。也就是,第一个人有3个属性,第二个人可以有4个属性。




按照数据库存储模型来说分为以下4类。


  • 列式存储模型
  • 文档数据模型
  • 键值数据模型
  • 图式数据模型





列式存储模型


应用场景:分布式数据存储,在分布式文件系统上支持随机读写的分布式数据存储。


典型的产品:Hadoop/Hbase,Hypertable 


数据模型:以“列”为中心进行存储,将同一列数据存储在一起。


优点:快速查询,高可扩展性,易于实现分布式扩展。






文档数据模型


应用场景:非强事务需求的web应用。


典型的产品:MongoBD,Elasticsearch


数据模型:键值模型,存储为文档模型


优点:数据模型无须事先定义,存储很随意。


键值数据模型


应用场景:内容缓存,用于大量的并行数据访问的高负载场景。


典型的产品:Redis,DynamoDB,LevelDB


数据模型:基于哈希表实现的key-value


有点:查询迅速,写入迅速


缺点:数据没有什么结构




图式数据模型


应用场景:社交网络、推荐系统,关系图谱(如陌陌的附近的人这样的功能)


典型的产品:Neo4J     


数据模型:图式结构


优点:适用于图式计算场景