• Mongodb简单介绍


    Mongodb

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

    MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

    关系型数据库:原子性、一致性、独立性、持久性。

    分布式计算:可靠性(容错)、可扩展性、资源共享、灵活性、更快的速度、开放系统、更高的性能。

    CAP定理:对于一个分布式计算系统来说,不可能同时满足以下三点:

    • 一致性(Consistency) (所有节点在同一时间具有相同的数据)
    • 可用性(Availability) (保证每个请求不管成功或者失败都有响应)
    • 分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)

    CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

    因此,根据CAP 原理将NoSQL 数据库分成了满足CA 原则、满足CP 原则和满足AP 原则三 大类:

    • CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
    • CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
    • AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

    数据库分类:

    1、列存储:hbase、cassandra、hypertable

    2、文档存储:mongodb、couchdb

    3、键值对存储:redis、mencachedb、berkeleydb

    4、图存储:neo4j、flockdb

    5、对象存储:db4o、versant

    6、Xml数据库:basex

    数据库启动:mongodb --config=/opt/mongodb-3.4.0/mongo.conf

    数据库关闭:ps -ef | grep mongo.conf | grep -v grep | awk ‘{print $2}’| xargs kill -9

    连接数据库:mongo  -port  27017

    URL连接格式:

    mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

    连接replica set 三台服务器, 写入操作应用在主服务器 并且分布查询到从服务器。mongodb://host1,host2,host3/?slaveOk=true

    show dbs;  查询所有数据库

    use dbname;   使用数据库,若不存在,则创建

    db;  显示当前使用的数据库

    db.dbname.insert({“name”:”zhangsan”});   在dbname中插入数据,若数据库不存在,则会创建

    db.dropDatabase()     删除正在使用的数据库

    db.createCollection(name,option).   创建集合

    db.collectionname.drop() 删除集合

    use dbname; show collections;db.setname.drop()  删除集合

    use dbname;show tables;db.setname.drop().  删除数据库dbname中的集合setname

    db.collectionname.insert(document).  在集合中插入文档

    db.collectionname.find(). 查询集合中已经插入的文档

    db.collectionname.updata(). 更新文档

    db.collectionname.remove({‘title’:’yes’}) 可删除,但是不会真正释放空间,需要继续执行db.repairDatabase()来回收磁盘空间

    db.collection.deleteMany({…}).   删除集合下的满足…的文档

    查询文档:

    db.col.find({“by”:”zhangsan”,”title”:”mongo”}).pretty()  查询by为zhangsan,并且title为mongo的数据

    db.col.find({$or:[{“by”:”zhangsan”},{”title”:”mongo”}]}).pretty()  查询by为zhangsan,或者title为mongo的数据

    条件操作符:

    $gt 大于

    $lt 小于

    $gte 大于等于

    $lte 小于等于

    db.col.find({likes:{$gte:100}}). 查找likes大于等于100的数据

    db.col.find({likes:{$gte:100,$lt:200}})  查找likes大于等于100且小于200的数据

    $type 数据的类型,如double为1,string为2

    db.col.find({“title”:{$type:2}}). 查找title类型为string的数据

    db.col.find({“title”:{$type:2}}).limit(3). 查找title类型为string的数据且只显示3条

    db.col.find({“title”:{$type:2}}).limit(1).skip(1)查找title类型为string的数据且显示第二条

    db.col.find({“title”:{$type:2}}).sort({“likes”:-1}).  1:升序排列,-1:降序排列

    创建索引:

    db.col.createIndex({“title”:1,”likes”:-1})  1为升序索引,-1为降序索引

    db.col.getIndexes().   查看索引

    db.col.totalIndexSize().  查看索引大小

    db.col.dropIndexes()   删除所有索引 

    db.col.dropIndex(“索引名称”)  删除指定索引

    mongodb主从复制:

    一主一从,一主多从。主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

    主节点配置:

    dbpath=/opt/mongodb-3.4.0/mongo.conf

    logpath=/opt/mongodb-3.4.0/log.log

    port=27017

    bind_ip=127.0.0.1

    master=true

    从节点配置:

    dbpath=/opt/mongodb-3.4.0/mongo.conf

    logpath=/opt/mongodb-3.4.0/log.log

    port=28018

    bind_ip=127.0.0.1

    slave=true

    source=127.0.0.1:27017

    分别启动两个mongodb数据库实例,在主库上做些操作,观看从库状态,若提示slaveok=false,则执行rs.slaveOk(),再查询。

    查看主节点信息:db.printReplicationInfo();

    查看从节点信息:db.printSlave ReplicationInfo();

    Mongodb-replica set副本集:自带故障转移功能的主从复制

    主节点配置:

    dbpath=/data/mongodb
    logpath=/opt/mongodb-3.4.0/logs/mongodb.log
    pidfilepath=/data/mongodb/master.pid
    logappend=true
    replSet=test_set
    bind_ip=10.148.0.39
    port = 28018
    fork = true

    从节点配置:

    dbpath=/data/mongodb
    logpath=/opt/mongodb-3.4.0/logs/mongodb.log
    pidfilepath=/data/mongodb/slave.pid
    logappend=true
    replSet=test_set
    bind_ip=10.148.0.43
    port = 28018
    fork = true

    在启动参数中加入replSet,然后在任意一台中rs.initiate()设置成员。rs.status()查看状态。

    连接到mongodb里面

    >cfg={_id:'test',members:[{_id:0,host:'127.0.0.1:28018'},{_id:1,host:'127.0.0.1:29019'}]};

    >rs.initiate(cfg);

    >rs.status();

    rs.add(…)添加节点。

    rs.remove(…)移除节点

    Mongodb-sharding切片:

    Shard:用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担

    Config server:mongod实例,存储了整个ClusterMetadata,其中包括chunk信息。

    Mongos:前端路由router,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用

    1、设置sharding副本集rs0

    nohup mongod --port 27031 --dbpath=/data/db4 --logpath=/data/log/rs1-2.log --logappend --fork--shardsvr --replSet=rs1

    rs.initiate(…)

     

    2、设置sharding副本集rs1

    3、创建config副本集conf

    nohup mongod --port 27100 --dbpath=/data/conf1 --logpath=/data/log/conf-1.log --logappend --fork --configsvr--replSet=conf &

    rs.initiate(…)

    4、创建route

    nohup mongos--port 40000 --configdbconf/localhost:27100,localhost:27101 --fork --logpath=/data/log/route.log --logappend &

    设置分片

    mongo localhost:40000> use admin

    > db.runCommand({ addshard: 'rs0/localhost:27020,localhost:27021'})

    > db.runCommand({ addshard: 'rs1/localhost:27030,localhost:27031'})

    > db.runCommand({ enablesharding: 'test'})

    > db.runCommand({ shardcollection: 'test.user', key: {name: 1}})

    Mongodb备份恢复:

    mongodump  -h dbhost [-d dbname] [-o backpath] 备份

    mongorestore -h<hostname><:port> -d dbname <path>

    mongoexport -d dbname -c collectionName -o fileName   #默认是json格式

    mongoimport [--port 28018] -d dbname -c clollectionName --file fileName  

    mongodb监控:

    mongostat

    mongotop

  • 相关阅读:
    WF 学习笔记 (1) 浅谈 WF 和 MVC 架构
    从HelloWorld看iphone程序的生命周期
    android开发我的新浪微博客户端阅读微博UI篇(6.1)
    关于微博服务端API的OAuth认证实现
    iphone开发我的新浪微博客户端开篇
    一个完整的新浪微博客户端android版OAuth认证示例
    android开发我的新浪微博客户端OAuth认证过程中用WebView代替原来的系统自带浏览器
    iphone开发我的新浪微博客户端用户登录准备篇(1.1)
    android开发我的新浪微博客户端登录页面功能篇(4.2)
    android开发我的新浪微博客户端登录页面UI篇(4.1)
  • 原文地址:https://www.cnblogs.com/Christine-ting/p/10482381.html
Copyright © 2020-2023  润新知