本文共 2865 字,大约阅读时间需要 9 分钟。
常见的关系型数据库有:MySQL、Oracle、DB2、SQL Server
非关系型数据库有MongoDB关系型数据库可以理解为依赖一个模型来创建的数据库,由于是建立在数据模型的基础上,所以我们可以通过SQL语句很方便的在多个表之间做复杂的查询操作
关系型数据库相对安全,因为直接存储在硬盘中所以突然的宕机、停电等意外不会导致数据丢失。
当遇到海量数据或者复杂的查询多表操作非常消耗内存。
非关系型数据库部署起来都比较简单,没有关系型数据库那么复杂。Mongo的存储方式为虚拟内存+持久化存储,
Mongo将数据写入内存中,再由虚拟内存管理器将其持久化到硬盘中,因此写操作会比关系型数据库快很多,不能进行联表查询,而且它对海量数据处理能力非常强,内存级数据库,查询速度也非常快。这里注意一点,当我们从mongo里取数据时,真正返回的是cusor并不是真实的数据,我们拿cusor做我们想做的事
MongoDB支持不同服务之间的异步的数据复制,来实现failover(故障转移,故障切换,故障恢复) and redundancy(数据冗余)
db.getCollection('classes').find({teachers:1534}):查找teachers列为1534的数据
# 1代表升序,-1代表降序db.getCollection('classes').find().sort({ name: 1})
# 返回name=1的2条数据db.getCollection('classes').find({ name: 1}).limit(2)# 返回name=1的数据后,返回第3,4,5条记录db.getCollection('classes').find({ name: 1}).limit(2).skip(3)
db.BATCH_FLOWS_POLICY_TEMPLATE.update({name: "abc"},{$set:{global_name:""}})
db.BATCH_FLOWS_POLICY_TEMPLATE.update({ },{ $unset:{ global_name:""}},{ multi:true})
PS : 最后一个参数{multi:true}默认时false,默认只更新第一列 ,true则更新所有
db.getCollection('classes').find({}).count()
当新加入一条数据在主数据库时,同时异步到备份路由器,用来实现故障切换
import pymongomongo_client = pymongo.MongoClient('127.0.0.1', 27017)
import pymongomongo_client = pymongo.MongoClient('127.0.0.1', 26666)mongo_auth = mongo_client.admin #或 mongo_client['admin'] admin为authenticationDatabasemongo_auth.authenticate('用户名', '密码')
mongo_client.server_info() = true/false
import pymongo:在Mongoutil文件里引入mongo数据库,调用正常的数据路语句, • get_docs_by_criteria(criteria):就相当于联合查询一条或多条对象 • get_docs_by_ids():支持多个id,会返回多个 • insert_multi_docs(values):支持同时插入多条数据 • get_multi_sort(sort_field):当get方法时直接支持排序,参数是某列内容 • update(doc,key):根据key的列更新表中的一行,也支持插入 • set(value):insert一条对象进入表 • update_by_criter(criter):根据筛选条件更新
MongoConn继承了Mongoutil,仅在原有基础上加上数据库的url,数据库name和表name,HA备份replica设置
HA时:数据库的连接要写2个,MongoDB默认的端口是:27017CONTROLLER_MONGO_URL:'mongodb://1.1.1.1:27017,2.2.2.2:27017/'
配置文件位置:/etc/mongodb.conf
添加了master = true 这一行即可 多网卡机器bind_ip这一行尽可能写成一个具体地址(最好写内网地址),因为slave上是根据这个同步的
添加了 slave = truesource = master的ip:27017
Cli 命令查看
show dbs
use snmp db.snmp.insert({ip:“3.3.3.3”,community:“cisco”}) show collections db.snmps.find()
环境变量位置:etc/profile
在里面可以添加代理http=""(IP或代理的域名)这样安装时就可以通过代理下载查看mongodb状态:systemctl status mongod.service
将second路由器变成primary路由器:
(备份路由器上)systemctl restart mongod
因为mongodb默认是从主节点读写数据的,副本节点上不允许读,可以设置副本节点可以读。
myrs:SECONDARY> db.getMongo().setSlaveOk();主备设置完毕后,通过rs.status()查看
2、测试副本集的故障转移功能
将主节点的mongod进程杀死: myrs:PRIMARY> use admin myrs:PRIMARY> db.shutdownServer() 此时secodary自动转换为主节点,通过rs.status()查看MONGO_URL: 'mongodb://1.1.1.1:27017,2.2.2.2:27017/'QA : Failed to start mongo.service: Unit not foundrs.initiate( { _id : "rs0", members: [ { _id: 0, host: "1.1.1.1:27017" }, { _id: 1, host: "2.2.2.2:27017" } ]})
转载地址:http://mnky.baihongyu.com/