初识Mongodb

来源:互联网 发布:土豆视频mac版 编辑:程序博客网 时间:2024/05/16 07:09
mongoDB从入门到X
开一个mongodb系列,从安装到开发(java)的一个过程,现在也算略微懂一点技术,怎么去入门一门技术,分享下自己的学习的过程,下面是mongodb系列的第一个系列----初识mongdb。
学一门技术(仅仅入门而言),要掌握3个点:
1.是什么(是什么类型的应用,服务的内容是什么,他的历史进程)
2.为什么(为什么在众多的应用中选择她而不选择其他的应用,她具有什么样的优缺点,他为什么会有这样的优缺点)
3.怎么做(或者应该说怎么去掌握她,使用她,当然仅仅是一点初步的了解)

本系列文章因为仅仅是对mongodb使用做一定的讲解,不会太过深入的去分析她(能力与时间都暂时有一定的缺陷,
不能从全局去分析)

1.mongodb是什么

mongoDB是nosql(非关系型数据库)的一种实现,MongoDB 是由C++语言编写的,是一个基于分布式文件存
储的开源数据库系统(主从,使用主从复制保证数据的一致性),在高负载的情况下,添加更多的节点,可以保证服
务器性能,MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案,MongoDB 将数据存储为一个文档,
数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,
数组及文档数组。----转自菜鸟教程。

个人理解:Mongdb是nosql的一种实现,与关系型数据库相比没有太多的规则约束,正因为他不是关系型数据
库,对于集合与集合之间的关系不会像sql型数据库一样体现的那么完善(规则少,灵活度就很高了),但这也是他
的一个优点(在不同的业务场景下)。他的文档结构是在不断变化,适用于功能在不断的变化,可以随时随地的根
据业务需求去更改文档的结构,而对项目本身不会有太大的影响。

nosql:NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型
库的数据库管理系统的统称,NoSQL用于超大规模数据的存储(例如谷歌或Facebook每天为他们的用户收集万亿比
特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。今天我们可以通过第三方平
台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成
的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应
用了,NoSQL数据库的发展能很好的处理这些大的数据。

2.为什么使用mongodb

MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。你可以在MongoDB记录中设置任何属性的
索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。

b.你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性(创建节点)。

c.如果负载的增加(需要更多的存储空间和更强的处理能力),它可以分布在计算机网络中的其他节点上这就是
所谓的分片。

d.Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组
(但查询语句写一起比较难受)。

e.MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。

f. GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件(这个后面会专门开一篇来说)。

g. Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。

h.MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。

优缺点:
优点:
- 高可扩展性
- 分布式计算
- 低成本
- 架构的灵活性,半结构化数据
- 没有复杂的关系
缺点:
- 没有标准化
- 有限的查询功能(到目前为止)
- 最终一致是不直观的程序

3.怎么做

1.安装mongodb(windows)
首先在官网下载,https://www.mongodb.com/download-center?jmp=nav#community,下载完成后解压到
自定义目录,解压完成后在其目录中创建一个data目录(保存mongodb的存储数据),在安装的bin目录下打开cmd,
cmd中执行下面的语句:mongod.exe --dbpath C:\mongoDB\data,dbpath指向的是mongdodb的保存数据的目录,
也就是刚才我创建的data目录的地址。
创建mongodb服务:在任意文件夹下创建一个mongod.cfg,文件中的内容如下:
dbpath=E:\software\database\data #数据库路径
logpath=E:\software\database\data\log\mongodb.log #日志输出文件路径
logappend=true #错误日志采用追加模式,配置这个选项后mongodb的日志会追加到现有的日志文件,
而不是从新创
建一个新文件
journal=true #启用日志文件,默认启用
quiet=true #这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
port=27017 #端口号 默认为27017
使用具有管理员权限的cmd窗口,进入bin目录下使用下面的命令:
mongod.exe --config "C:\mongoDB\mongod.cfg" --install   
这时你可以看下windows的服务中看mongodb的服务是否已经注册
最好配置下path,将mongodb的bin目录配置到path中
启动服务,net start mongodb

2.Mongodb基本概念讲解:
SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield 数据字段/域
indexindex索引
table joins表连接,MongoDB不支持(但是在与spring集成时,支持了连接查询)
primarykeyprimary key主键,MongoDB自动将_id字段设置为主键

a.数据库
一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放在
不同的文件中。
"show dbs" 命令可以显示所有数据库的列表。
db显示当前数据库或集合
use test 连接到test库或集合
数据库也通过名字来标识。数据库名可以是满足以下条件的任意UTF-8字符串。
1.不能是空字符串("")。
2.不得含有' '(空格)、.、$、/、\和\0 (空宇符)。
3.应全部小写。
4.最多64字节。
5.有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库:
admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动
继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者
关闭服务器。
local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

b.集合
集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management
System)中的表格。集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型
的数据,但通常情况下我们插入集合的数据都会有一定的关联性。比如,我们可以将以下不同数据结构的文档插入
到集合中:
{"site":"www.baidu.com"}
{"site":"www.google.com","name":"Google"}
{"site":"www.runoob.com","name":"菜鸟教程","num":5}
当第一个文档插入时,集合就会被创建。

合法的集合名
集合名不能是空字符串""。
集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
集合名不能以"system."开头,这是为系统集合保留的前缀。
用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成
的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。 

capped collections
Capped collections 就是固定大小的collection。
它有很高的性能以及队列过期的特性(过期按照插入的顺序). 有点和 "RRD" 概念类似。
Capped collections是高性能自动的维护对象的插入顺序。它非常适合类似记录日志的功能 和标准的collection
不同,你必须要显式的创建一个capped collection, 指定一个collection的大小,单位是字节。collection的数
据存储空间值提前分配的。要注意的是指定的存储大小包含了数据库的头信息。

例如:db.createCollection("mycoll", {capped:true, size:100000})
上面的意思是在当前的数据库中创建一个mycoll的集合,他的类型是capped,他的size是100000
在capped collection中,你能添加新的对象。能进行更新,然而,对象不会增加存储空间。如果增加,
更新就会失败 。
数据库不允许进行删除。使用drop()方法删除collection所有的行。注意: 删除之后,你必须显式的重新创建这
个collection。在32bit机器中,capped collection最大存储为1e9( 1X109)个字节。

c.文档
文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段(如果保存相同的key会覆盖),
并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

下表列出了 RDBMS(关系型数据库) 与 MongoDB 对应的术语:
RDBMS MongoDB
数据库 数据库
表格 集合
文档
字段
表联合 嵌入文档
主键 主键 (MongoDB 提供了 key 为 _id )

个人理解:文档这个概念要区分与上表中的row,他是一个特殊的列s,在同一个mongodb集合中可以有多个不同
的文档,而在数据库中表的列名只有在手动更改才会改变,而mongodb不是这样,在插入时,就设置了这个
文档的key-value对(设置特殊的列名),其实我个人更倾向与把mongodb中的文档和sql中的表去对应,集合下
可以有多个不同的文档。

需要注意的是:
1.文档中的键/值对是有序的。
2.文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个
嵌入的文档)。
3.MongoDB区分类型和大小写。区分类型和大小写
4.MongoDB的文档不能有重复的键。(在存储时命令可以执行,但会被后面的值覆盖)
5.文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
6.文档键命名规范:
键不能含有\0 (空字符)。这个字符用来表示键的结尾。
.和$有特别的意义,只有在特定环境下才能使用。
以下划线"_"开头的键是保留的(不是严格要求的)。

以上部分内容来源于菜鸟教程,本人是根据菜鸟教程和网路上一些文档进行学习的,如有冒犯请通知,谢谢。

1 0
原创粉丝点击