1、数据模型
主流的数据模型包括:关系模型、文档模型、图状数据模型
一、关系模型
数据被组织成关系,在SQL中成为表(table),其中每一个关系都是元组(turples)的无序集合(在SQL中成为行)
二、文档模型
也就是NoSQL,采用它有这样几个驱动因素,包括:
- 适用于一对多的数据模型
-
比关系数据库更好的扩展性需求,包括支持超大数据集或超高写入吞吐量
-
广泛偏心免费和开源软件而不是商业数据库产品
-
关系模型不能很好地支持一些特定的查询操做
-
对关系模式一些限制性感到沮丧,渴望更具动态和表达力的数据模型
-
MySQL执行Alter Table时会把如今的整张表复制,于是当表很大时可能会须要几分钟甚至几小时的停机时间,尽管如今有各类辅助工具能够解决这个限制
文档模型的劣势:
文档数据库有时被称为无模式,但这具备误导性,由于读数据的代码一般采用某种结构于是存在某种隐形模式,而不是数据库强制执行。更准确的术语应该是读时模式(数据的结构是隐式的,只有在读时才解释),与写时模式相对应。读时模式相似编程语言中的动态(运行时)类型检查,而写时模式相似于静态(编译时)类型检查。
三、图状数据模型
2、数据查询语言
一、查询语言分类
select * from animals where famiy='Sharks'
function getSharks(){
var sharks = [];
for(var i=0; i<animals.length; i++){
if(animals[i].family === "Sharks"){
sharks.push(animals[i]);
}
}
return sharks;
}
声明式查询语言比命令式API更加简洁和容易使用。更重要的是,它对外隐藏了数据库引擎的不少实现细节,这样数据库系统可以在不改变查询语句的状况下提升性能。
二、MapReduce查询
db.observations.mapReduce(
function map(){
var year = this.observationTimestamp.getFullYear();
var month = this.observationTimesstamp.getMonth()+1;
emit(year + "-" +month, this.numAnimals);
},
function reduce(key, values){
return Arrays.sum(values);
},
{
query:{family : "Sharks"},
out: "monthlySharkReport"
}
);
三、Cypher查询语言
最先为Neo4j图形数据库而建立(它以电影“黑客帝国”中的一个角色命名,与密码学中的密码无关)
若是相同的查询能够用一种查询语言写4行代码完成,而另外一种查询语言则须要29行代码,这足以说明不一样的数据模型适用于不一样的场景。所以,选择适合应用程序的数据模型很是重要