NoSQL
是not only SQL的缩写,就是说“不仅仅是SQL”
NoSQL提倡用非关系型的数据存储,这种存储方式非常灵活,而且速度快,但是不适合客户服务器编程
NoSQL的数据非常适合用于进行网络上的传输,适合存储爬虫爬取的数据,适合用于分布式
NoSQL数据库分类
列存储:Hbase,Hypertable,最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势,有点类似于与sharding相对的垂直切分
文档存储:MongoDB,一般用类似json的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引,实现关系数据库的某些功能。
key-value:Memcache,redis,可以通过key快速查询到其value
图存储:Neo4J,FlockDB,图形关系的最佳存储
对象存储:db4o,Versant,通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据
xml数据库:DB XML,会造成数据冗余,能高效存储XML数据
MongoDB
是由C++语言编写的,基于分布式文件存储的数据库系统。在高负载的情况下,添加更多的节点来保证服务器性能。
MongoDB文档类似于JSON对象,由键值对组成,从下面的例子可以看出,这很适合在网络上传输,json是可以直接传输的,不需要进行编码
{
name:'hwq',
age:20,
status:'A',
group:['news','sports'],
}
主要特点
- MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
- 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
- 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
- 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
- Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
- MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
- Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
- Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
- Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
- GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
- MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
命令行下运行MongoDB服务器
C:\mongodb\bin\mongod --dbpath c:\data\db
连接MongoDB
C:\mongodb\bin\mongo.exe
配置MongoDB服务
mkdir c:\data\db
mkdir c:\data\log
安装MongoDB服务
C:\mongodb\bin\mongod.exe --config "C:\mongodb\mongod.cfg" --install
启动MongoDB
net start MongoDB
关闭
net stop MongoDB
移除MongoDB服务
C:\mongodb\bin\mongod.exe --remove
命令行下运行 MongoDB 服务器 和 配置 MongoDB 服务 任选一个方式启动就可以。
MongoDB后台管理Shell
>mongo
会默认连接到test文档(数据库)
Shell是个JavaScript Shell,所以可以做一些简单的算术运算
>2+2
4
>db
test //查看当前操作的数据库
>db.student.insert({name:hwq})
WriteResult({ "nInserted" : 1 })
>db.student.find()
{ "_id" : ObjectId("5604ff74a274a611b0c990aa"), "x" : 10 }