MangoDB

MongoDB

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性
能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像
关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类
型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可
以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
说明:BSON是一种计算机数据交换格式,主要被用作MongoDB数据库中的数据存储和网络传输格式。
它是一种二进制表示形式,能用来表示简单数据结构、关联数组(MongoDB中称为“对象”或“文档”)以
及MongoDB中的各种数据类型。BSON之名缘于JSON,含义为Binary JSON(二进制JSON)。
1.1 特点
(1) 面向集合存储,易存储对象类型的数据
(2) 支持动态查询
(3) 支持完全索引,包含内部对象
(4) 支持复制和故障恢复
(5) 支持多种开发语言
(6) 使用高效的二进制数据存储,包括大型对象(如视频等)
1.2 适用场景
1)网站实时数据处理。它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及
高度伸缩性。
2)缓存。由于性能很高,它适合作为信息基础设施的缓存层。在系统重启之后,由它搭建的持久化缓
存层可以避免下层的数据源过载。
3)高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库,它的路线图中已经包含对
MapReduce引擎的内置支持。
1.3 不适用的场景如下
1)要求高度事务性的系统。
2)传统的商业智能应用。
3)复杂的跨文档(表)级联查询。
启动mongodb服务

[root@localhost bin]# ./mongod -f mongodb.conf

启动mongodb客户端

[root@localhost bin]# ./mongo

mongodb数据类型

null
null用于表示空值或不存在的字段。
{"x" : null}
布尔类型
布尔型数据有true和false两个值。
{"x" : true}
数值类型
在Mongo shell中,默认使用64位浮点型数据。因此,会有以下两种数值形式:
{"x" : 2.32}//或{"x" : 2}

对于整数类型,可以使用NumberInt()(位有符号整型)或NumberLong()(8位有符号整型)方法进行转
换。示例如下:
{"x" : NumberInt(2)} {"x" : NumberLong(2)}
字符串
MongoDB中字符串类型使用UTF-8编码的字符表示。示例如下:
{"x" : "123456@qq.com"}
日期类型
MongoDB中日期使用时间戳表示,单位为毫秒,不存储时区。示例如下:
{"x" : new Date()}
创建日期对象时应该使用new Date(),而非构造函数Date()。将构造函数作为函数时返回的日期格式是字符串,而非日期对象(与JavaScript工作机制有关)。
正则表达式
MongoDB中可使用与JavaScript相同的正则表达式进行查询筛选等。示例如下:
{"x" : /zhengze/i}
数组
数据集可以用数组格式存储,与JavaSript中的数组表示相同。
{"x" : ["shuzu", "list"]}
数组中可以包含不同类型的数据元素,包括内嵌文档和数组等。所有MongoDB中键-值对支持的数据类型都可以用做数组的值。
内嵌文档
文档中可以嵌套一个子文档。在MongoDB文档总大小限制为16MB,建议使用子文档的形式组织数据,子文档查询效率要高于多键查询。示例如下:
{"x" : {"folder" : "folder"}}
_id和ObjectId
MongoDB中每个文档都有一个"id"键,“id"可以是任何类型,不指”_id"时MongoDB会生成一个ObjectId对象
{"_id" : ObjectId()}
ObjectId是一个12字节(24个十六进制数字)的存储空间,ObjectId的12字节数据组织方式如下:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11
—时间戳-- | 机器码- | PID- | --计数器
代码
MongoDB的文档和代码中可以包括JavaScript代码。
{"x" : function(){ /*JavaScript代码*/}}
二进制数据
二进制数据是一个二进制字节的字作串,要保存非UTF-8字符到数据库中,只能使用十进制数据。

java连接mongoDB

<dependencies>
	<dependency>
		<groupId>org.mongodb</groupId>
		<artifactId>mongo-java-driver</artifactId>
		<version>3.2.2</version>
	</dependency>
</dependencies>

索引

创建索引的语法
>db.collection.createIndex(keys, options)
索引分类

  1. 默认索引
    MongoDB有个默认的“id”的键,相当于“主键”的角色。集合创建后系统会自动创建一个索引在“id”键上,它是默认索引,索引名叫“id”,是无法被删除的。
    >db.collectionName.getIndexes()
  2. 单列索引
    在单个键上创建的索引就是单列索引,例如我们要在Users集合上给title键创建一个单列索引
  3. 组合索引
    同时对多个键创建组合索引。如下代码创建了按照“UserId”正序,“UserName”逆序的组合索引:
    >db.collectionName.createIndex({"userid":1,"username":-1})
  4. 唯一索引
    唯一索引限制了对当前键添加值时,不能添加重复的信息。值得注意的是,当文档不存在指定键时,会被认为键值是“null”,所以“null”也会被认为是重复的,所以一般被作为唯一索引的键,最好都要有键值对。
    对“UserId”创建唯一索引(这时候最后一个参数为“true”):
    >db.collectionName.CreateIndex({"UserId":1}, { unique: true });
  5. TTL索引
    TTL指生命周期的意思。即存储的document存储带有过期时间属性,超过生命周期自己主动删除。
    像日志数据、系统自己主动产生的暂时数据、会话数据等均符合这一场景。
    db.log_events.createIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 })
  6. 删除索引
    关系型数据库中,表被删除了,索引也不会存在。在MongoDB中不存在删除集合的说法,就算集合数据清空,索引都是还在的,要移除索引还需要手工删除。
    >db.collectionName.dropIndexes()
    删除集合指定索引
    >db.collectionName.dropIndex("索引名称")
    drop()集合时,索引也会删除,remove()集合时,索引仍然存在

mongoDB备份与恢复

mongodump命令来备份数据
>mongodump -h dbhost -d dbname -o dbdirectory
-h:
MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d:
需要备份的数据库实例,例如:test
-o:
备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。

执行以上命令后,客户端会连接到ip为 127.0.0.1 端口号为 27017 的MongoDB服务上,并备份所有数
据到 bin/dump/ 目录中。命令输出结果如下:
[root@localhost bin]# mongodump

writing admin.system.version to
done dumping admin.system.version (1 document)
writing mydb1.users to
writing mydb1.student to
done dumping mydb1.users (4 documents)
done dumping mydb1.student (0 documents)

MongoDB数据恢复
mongodb使用 mongorestore 命令来恢复备份的数据。
>mongorestore -h <hostname><:port> -d dbname <path>

  • –host <:port>, -h <:port>:
    MongoDB所在服务器地址,默认为: localhost:27017
  • –db , -d :
    需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
  • –drop:
    恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都
    会被删除,慎用哦!

  • mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。
    你不能同时指定 和 --dir 选项,–dir也可以设置备份目录。
  • –dir:
    指定备份的目录
    你不能同时指定 和 --dir 选项。
    [root@localhost bin]# mongorestore
.....
no indexes to restore
finished restoring mydb1.users (4 documents)
done

集群搭建

  1. 关闭虚拟机防火墙
  2. 修改mongodb.conf文件,添加replSet配置(需要修改为同一名称)
    replSet=rep1 #复制集名称
  3. 初始化复制集群
    rs.initiate({_id:'rep1',members:[{_id:1,host:'192.168.46.99:27017'},{_id:2,host:'192.168.46.98:27017'},{_id:3,host:'192.168.46.97:27017'}]})
  4. 查看集群状态
    rs.status()
  5. 测试集群
    db.users.insert({“number”:“1234421”,“name”:“qqqqqq”})
    db.user.find()
    如果不允许查询,通常情况下是由于从机不具备读写操作
    >rs.slaveOk
  6. 故障转移问题
    当主机发生宕机,通过关闭数据库来模拟
    >db.shutdownServer()
  7. 主复制集添加仲裁者(arbiter)
    对于偶数集群环境下有效。可以选举主机
    当只有两台机器,一台宕机,那么另一台因为无法进行选举不能成为主机。此时需要添加仲裁者
    `rs.addArb(192.168.46.97:27017)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值