MongoDB中的一些基本概念

MongoDB是一款强大、灵活、易于扩展的通用型数据库。它能扩展出非常多的功能。比如,二级索引(secondary index),范围查询(range query),聚合(aggregation),以及地理空间索引(geospatital index)
易于使用
MongoDB是一个面向文档(document-oriented)的数据库,而不是关系型的数据库,不采用关系模式主要是为了获得更好的扩展性。也有其他的好处。
面向文档数据库不再有“行”的概念,取而代之的是 “文档(document)"模型。通过在文档中嵌入文档和数组,面向文档的方法能够仅用一条记录来表现复杂的层次关系。
不再有预定义(predefined schema):文档的键(key)和值(value)不再是固定的类型和大小。根据需要添加和删除字段变得更容易。
开发者能尝试大量的数据模型,选择其中一个最好的。
易于扩展
MongoDB的涉及采用横向扩展。面向文档的数据模型使它可以很容易地在多台服务器上进行数据分割。MongoDB能自动处理跨集群的数据和负载,自动重新分配文档,以及将用户请求路由到正确的机器上。这样开发者能够集中精力编写程序,不需要考虑横向扩展的问题。如果一个集群需要更大的容量,只需要想集群添加新的服务器,MongoDB会自动将先用的数据向新服务器传送。
丰富的功能
MongoDB作为一款通用型的数据库,除了能够创建、读取、更新和删除数据之外,还提供一系列不断扩展的独特功能:
1.索引
MongoDB支持通用的二级索引,多种查询,且提供唯一索引、复合索引、地理空间索引,以及全文索引
2.聚合(aggregation)
MongoDB支持“聚合管道”(aggregation pipeline)。用户能够通过简单的片段创建复杂的聚合,并且通过数据库自动优化
3.特殊的聚合类型
MongoDB支持存在时间的有限聚合。
4.文件存储
MongoDB支持一种非常易用的协议,用于存储大文件和文件元数据
MongoDB并不支持一些在关系型数据库中很普遍的功能,比如连接和复杂的多行事务。
卓越的性能
MongoDB的一个主要目标是提供卓越的性能,很大程度上决定了MongoDB的设计。MongoDB能对文档进行动态的填充。也能预分配数据文件以利用额外的空间来换取稳定的性能。
MongoDB把尽可能多的内存用作缓存(cache),试图为每次查询自动选择正确的索引。
数据库服务器尽可能的将处理和逻辑交给客户端

Mongo中的基本概念
文档、集合、数据库、特殊键_id、javascript shell
文档
文档是MongoDB的核心概念。文档是键值对的一个有序集合,非常类型于关系数据库中的行,但是更具有表现力
{“greeting”:“hello,world!”,“foo”:“3”}

文档中的值是可以有多种不同的数据类型(甚至可以是一个完整的内嵌文档)。在上面这个例子中,“greeting”的值是一个字符型,但是"foo"的值是一个整数
文档的键是字符型。除了少数例外情况,键可以是任意UTF-8字符
键不能含有\0(空字符)。这个字符用来表示键的结尾
.和$具有特殊意义,只能用在特定的情况下。通常这两个字符是被保留的,如果使用不当的话,会报错
MongDB中不但区分类型,还区分大小写,一下两个文档就是不同的:
{“foo”:3}
{“foo”:“3”}
下面的两个也是不同的
{“foo”:3}
{“Foo”:3}

还有一个重要的事情要注意,就是MongoDB中不能有重复的键。
文档中的键/值对是有序的:{“X”:1,“Y”:2}和{“Y”:2,“X”:1}是不同的。通常情况下,字段顺序并不重要,无须让数据库模式依赖特定的殊勋(MongoDB会对字段进行重新排序).在某些特殊情况下,字段的顺序变动很重要。
集合
集合就是一组文档,如果将MongoDB中的一个文档比喻成关系数据库中的一行,那么集合就相当于一张表
动态模式
集合是动态模式的。意味着一个集合里面的文档可以是各种各样的,
命名
集合使用名称进行标识。集合名可以满足一下条件的任意UTF-8字符串

1.集合名不能是空字符串("")
2.集合名称不能包含\0(空字符),这个字符标识集合名称的结束
3.集合名称不能以“system”开头,这是系统集合保留的前缀,比如systtem.user 这个集合中保存的事数据库用户的信息,而system.namespaces集合保存这所有数据库集合的信息
4.用户创建的集合不能在集合名中包含保留字符"$".因为某些系统生成的集合中包含$,很多驱动程序确实支持集合中包含该字符串。除非你要访问这种系统的创建的集合,否则不应该在集合名中包含$

子集合
组织集合的一种惯例是使用"."分隔不同命名空间的子集合。例如,一个具有博客功能的应用可能包含两个集合,分别是blog.posts和blog.authors。这是为了使组织结构更清晰。这里的blog集合跟他的子集合没任何的关系
虽然子集合没有任何特别的属性,但是他们很有用,因为很多MongoDB工具都是用了子集合
1.GridFS (一种用于存储大文件的协议)是用子集合来存储文件的元数据,这样就可以与文件内容块很好的隔离
2.大多数驱动程序提供了一些语法糖,用于访问指定集合的子集合
在MongoDB中推荐是用子集合来组织数据,因为非常高校。

数据库
在MongoDB中,多个文档组成集合,多个集合组成数据库。一个MongoDB实例可以承载多个数据库。每个数据库介意有0个或者多个集合。每个数据库都有独立的权限,即使在磁盘上,不同的数据库可以存放在不同的文件中。按照经验,我们将有关一个应用程序的所有数据都存储在一个数据库中。如果想要在一个MongoDB服务器上存放多个应用程序或者用户的数据,就需要使用不同的数据库。
数据库通过名称来标识,这点与集合类似。数据库名可以满足一下条件的任意UTF-8字符集

1.不能是空字符串("")
2.不能晗有/、\、.、“、*、<、>、:、|、?、$、(一个空格)、\0(空字符).基本上只能使用ASCII中的字母和数字
3.数据库名称区分大小写字母,即使在不区分大小写的文件也是如此,简单起见,数据库名称应该全部小写
4.数据库名称最多64字节

数据库最终会变成文件系统中的文件,而数据库名称就是相应的文件名称,这就是数据库名称有这么多限制的原因

另外,有一些数据库名称是保留的,可以直接访问这些具有特殊意义的数据库
1. admin
从身份验证的角度来讲,这是root数据库。如果一个用户添加到admin数据库,那么这个用户自动获取所有数据库的权限。再者,一些特定的服务器端命令也只能从admin数据库运行,如列出所有数据库或者关闭服务器
2.local
这个数据库永远都不可以复制,且一台服务器上的所有本地集合都可以存储在这个数据库中
3.config
MongoDB用于分片设置的时候,分片信息会保存在config数据库中

启动MongoDB
通常MongoDB作为网络服务器来运行,客户端连接到服务器并执行操作,下载MongoDB并解压,运行mongod命令启动数据库服务器
mongod在没有参数的情况下会使用默认数据目录 /data/db(c:\data\db)、如果数据目录不存在或者不可写,会启动失败。因此。在启动MongoDB服务器之前,应该选创建目录并赋予相应的权限

启动时,会输出版本信息和系统信息,然后等待连接,默认监听27017端口,如果端口被占用会启动失败。
MongoDB还会启动一个非常基本的的HTTP服务器,监听数字高于1000的端口,也就是28017端口,这也就意味着访问http://localhost:28017 ,能获取数据库的管理信息
终止mongod的运行,只需要在服务器的shell中ctrl+C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值