阅读 95

左手MongoDB(MongoDB的优化和安全建议)

一、提高MongoDB读写性能

1、“批量插入”与“逐条插入”数据,比较性能差异

批量插入数据的性能远远超过逐条插入数据性能

2、“插入”与“更新”数据,比较性能差异

对于必须逐条更新大量数据的情况,也可以使用插入代替更新来提高性能

3、使用“索引”提高查询速度

原理比较

举例:在集合one_by_one申,要查询所有"salary" 字段大于1000的记录。

如果没有对salay添加索引,那么MongoDB就会一条一条地检查, 如果"salary"大于10000 就记录下来。直到把所有记录遍历完,然后输出所有满足“salary"大于100的记录。

如果为“salary"添加了索引,那么MongoDB在创建索引的过程中就会对“salary”的值进行排序,索引默认是升序。有了索引后,MongoDB的查询会先从索引中寻找,于是就能大大提高速度。
创建索引

import pymongo
handler = pymongo.MongoClient().chapter_8.one _by_one
handler.create_index('salary',background = True)

其中第3行代码,对"salary" 字段创建索引。background可以为True或者为False。

  • 如果为False,那在创建索引时,这个集合就不能被查询也不能被写入,但是速度快。
  • 如果设置为True,那么创建索引的速度会慢一些,但是不影响其他程序读写这个集合。

对一个字段添加索引以后,千万量级的数据在一秒内就可以查询出结果。

对一个字段,索引只需要添加一次,之后插入的新数据MongoDB都会自动处理。

索引是以空间换时间。集合中的数据越多,索引占用的硬盘空间
就越多。
所以,只对必要的字段添加索引,不要对所有字段都添加索引。

_id默认自带索引, 不需要添加。

4、引入Redis,以降低MongoDB的读取频率

5、增添适当冗余信息,以提高查询速度

二、提高MongoDB的安全性

1、配置权限管理机制

MongoDB默认没有账号和密码,只要连上了它就可以查询、修改、增加、删除任何内容。

为了增强MongoDB的安全性,需要配置基于角色的访问控制(Role-Based Acces Cotrol,RBAC)机制。

RBAC机制涉及三个关键定义:角色(Roles)、特权(Privileges)和用户(Users)。

  • 特权是指一些资源和能够在资源上进行的操作。
  • 一个角色可以有多种特权。
  • 一个用户可以被赋予不同的角色。
    (1)、创建管理员用户
    管理员用户的作用是创建其他用户。管理员用户本身不能对数据库进行控制。
use admin

db.createUser(
{ user:'admin',
pwd:'123456',
roles:[{role:'userAdminAnyDatabase',db:'admin'}]
})

mongod.conf添加

security:
  authorization: enabled

重启,再次连接客户端

show dbs

查询不到数据集

mongo -port 27017 -u "admin"  -p "123456" --authenticationDatabase "admin"

查询成功
(2)创建普通用户

db.createUser(
    {
    user : "test_name",
    pwd : "123456",
    roles: [ { role : "readWrite", db : "chapter_8" } ,
    { role : "read", db : "chapter_7" } ]
    }
    )


(3)使用Robo 3T连接有账号的MongoDB

编辑连接


(4)创建能操作数据库的管理员用户

管理员(admin账号)能创建其他用户,看似权限非常大,但它不能访问任何一个数据库。
所以,如果有必要,还需要创建一个能对所有数据库都有全部权限的用户。

db.createUser(
    {
    user : "root",
    pwd : "123456",
    roles: ['root']
    }
    )


(5)用Python连接有密码的MongoDB

mongobd://用户名:密码@数据库地址:端口/数据库名

如果使用root用户,不用指定数据库

2、开放外网访问

修改mongod.conf

作者:羋虹光

原文链接:https://www.jianshu.com/p/9d10688dbb38

文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐