分类:database| 发布时间:2014-05-06 22:55:44
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写, 是对不同于传统的关系型数据库的数据库管理系统的统称。 NoSQL用于超大规模数据的存储。 (例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。 这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
在计算机科学中, CAP定理(CAP theorem), 又被称作 布鲁尔定理, 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。
MongoDB是由C++语言编写的开源数据库系统。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB将数据存储为一个文档。MongoDB是一个基于分布式文件存储的数据库。
Ubuntu下可以通过命令:
$sudo apt-get install mongodb
进行MongoDB的安装,其他的系统可以到 MongoDB官网 进行下载。
一个MongoDB中可以创建多个数据库,在使用数据库之前不需要先创建。
可以通过show dbs查看所有的数据库,而通过db命令查看当前的数据库:
$mongo
MongoDB shell version: 2.4.9
connecting to: test
> show dbs
local 0.078125GB
test 0.203125GB
> use mydb
switched to db mydb
> show dbs
local 0.078125GB
test 0.203125GB
> db
mydb
> use test
switched to db test
> db
test
>
文档是MongoDB中的最核心的概念,是其核心单元,我们可以将文档类比成关系型数据库中的每一行数据。 多个键及其关联的值有序的放置在一起就是文档。在MongoDB中使用一种类JSON的BSON存储数据。
集合就是一组文档的组合。如果将文档类比成数据库中的行,那么集合就可以类比成数据库的表。 在MongoDB中的集合是无模式的,也就是说集合中存储的文档的结构可以是不同的, 比如下面的两个文档可以同时存入到一个集合中:
{"name":"mengxiangyue"} {"Name":"mengxiangyue","sex":"nan"}
当第一个文档插入时,集合就会被创建。
可以通过"."号来创建子集合。例如你有一个gps集合,你可以使用gps.spot,gps.city来更好地组织集合。
数据类型 描述
string 可以是一个空字符串或者字符组合
integer 整数
boolean 逻辑值 True 或者 False
double 双精度浮点型
null 不是0,也不是空
array 数组
object 对象型,可以是一个值,变量,函数,或者数据结构。
timestamp timestamp存储为64为的值。前32位保存的是UTC时间,单位是秒,
后32位是在这一秒内的计数值,从0开始,
每新建一个MongoTimestamp对象就加一
Internationalized UTF-8 字符串。
Strings
Object IDs 在mongodb中的文档需要使用唯一的关键字_id来标识他们
> use mydb
switched to db mydb
> db.users.insert({"name":"zhangsan","age":22})
> db.users.insert({"name":"lisi","age":33})
> db.users.insert({"name":"wangwu","age":"Unknown"})
> db.users.insert({"name":"zhaoliu","age":"Unknown"})
MongoDB数据更新可以使用update()函数。
db.collection.update(criteria, objNew, upsert, multi)
update()函数接受以下四个参数:
比如我要将"wangwu"的年龄更新为40:
> db.users.update({"name":"wangwu"},{"name":"wangwu","age":40})
> db.users.find({"name":"wangwu"})
{ "_id" : ObjectId("53690ef81a319ed396c457f4"), "name" : "wangwu", "age" : 40 }
可以通过 db.collection.remove(criteria) 删除数据,比如:
> db.users.remove({"name":"wangwu"})
如果要删除集合中的所有数据可以这样:
> db.users.remove({})
> db.users.drop()
> db.dropDatabase()
查询集合中的数据
> db.users.find()
{ "_id" : ObjectId("53690e9f1a319ed396c457f2"), "name" : "zhangsan", "age" : 22 }
{ "_id" : ObjectId("53690ee61a319ed396c457f3"), "name" : "lisi", "age" : 33 }
{ "_id" : ObjectId("53690ef81a319ed396c457f4"), "name" : "wangwu", "age" : 40 }
{ "_id" : ObjectId("536971b1c957383ca887805f"), "name" : "zhaoliu", "age" : "Unknown" }
通过特定条件查询
> db.users.find({"name":"lisi"})
{ "_id" : ObjectId("53690ee61a319ed396c457f3"), "name" : "lisi", "age" : 33 }
MongoDB中条件操作符有:
例子:
> db.users.find({"age":{$gte:30}})
{ "_id" : ObjectId("53690ee61a319ed396c457f3"), "name" : "lisi", "age" : 33 }
{ "_id" : ObjectId("53690ef81a319ed396c457f4"), "name" : "wangwu", "age" : 40 }
此外,MongoDB还有用于查询特性类型数据的操作符 $type。 $type操作符是基于BSON类型来检索集合中匹配的结果。
MongoDB中可以使用的类型:
类型描述 类型值
Double 1
String 2
Object 3
Array 4
Binary data 5
Object id 7
Boolean 8
Date 9
Null 10
Regular expression 11
JavaScript code 13
Symbol 14
JavaScript code with scope 15
32-bit integer 16
Timestamp 17
64-bit integer 18
Min key 255
Max key 127
比如,我们要查找所有age字段类型为Double的文档:
> db.users.find({"age":{$type:1}})
{ "_id" : ObjectId("53690e9f1a319ed396c457f2"), "name" : "zhangsan", "age" : 22 }
{ "_id" : ObjectId("53690ee61a319ed396c457f3"), "name" : "lisi", "age" : 33 }
{ "_id" : ObjectId("53690ef81a319ed396c457f4"), "name" : "wangwu", "age" : 40 }