mongodb学习

概念

- oplog 主节点的操作记录,幂等性
- mongod mongo后台进程
- secondary节点 副本集中的非主结点

集群

- 功能
- 数据冗余
- 读写分离?
- 缺点
- 容错性差

副本集

- 概念
- 一组有相同数据的mongodb实例,只有主实例执行写操作,其它实例保持同步;主可读写,其它节点只可读
- 功能
- 自动容错(auto-failover)
- 自动恢复(auto-recovery)
- 读写分离
- connection string的options里添加readPreference=secondaryPreferred
- 数据冗余
- 缺点
- 待补充
- 注意事项
- 如果使用当前主节点地址建立连接,当当前主节点失效(降级为secondary节点),客户端将无法执行写操作
- 使用 副本集方式 连接副本集
- connection string的options里添加replicaSet=xxx
- replicaSet参数指定,要连接的是一个副本集,但只提供了一个在这个副本集中的ip:host,是什么行为?
- 如果不传这个参数,至少提供了两个在这个副本集中的ip:host,通过mongo driver可以检测是否为副本集
- 如果不传这个参数,只提供了一个在这个副本集中的ip:host,mongo driver只会连接这一个ip:host
- driver建立连接的过程
- 参考了下面文献中stackoverflow.com的一个提问,但没有分析过cxx driver代码和验证
- 如果seed list中有多个ip:host,driver会检测使用哪种连接方式(replicaSet还是sharding)
- 如果检测到是replicaset,driver会通过seed list中的结点找到主节点
- 然后driver更新replicaset中的结点,并动态维持最新的状态

安装

API学习

MONGO C API

MONGO CXX API

概念

增删改查

  • insert 向集合中增加一个文档
  • remove 删除文档
  • update 更新(修改)某些文档
    • 文档替换
    • 文档修改器,只修改文档某个部分
  • find 返回集合中所有文档
  • findOne 返回集合中的某一个文档

tutorial

  • 建立连接

    • mongocxx::instance
    • mongocxx::uri
    • mongocxx::client
  • 访问数据库、集合
    • 使用 []操作符
    • database()方法、collection()方法
  • 访问文档中的fields
    • 使用 []操作符
    • 返回的是bsoncxx::document::element
    • 如何判断是否返回有效值?(有这个fields)
    • 由element转换为代码中使用的各种类型?
bsoncxx::document::element element = view["name"];
if(element.type() != bsoncxx::type::k_utf8) {
// Error
}
std::string name = element.get_utf8().value.to_string();
  • bsoncxx::type中规定的类型

    • k_utf8 string类型?
    • 待补充
    • 待补充
    • 待补充
  • 创建BSON文档的方法

    • bsoncxx::builder::stream
    • bsoncxx::builder::basic
    • one-off builder functions
using bsoncxx::builder::basic::kvp;

// { "hello": "world" }
bsoncxx::document::value document = bsoncxx::builder::basic::make_document(kvp("hello", "world"));
  • 文档的两种存在状态

    • bsoncxx::document::value
    • bsoncxx::document::view
      • view转换成string
stdx::string_view view = e.get_utf8().value;
string name = view.to_string();
  • 在集合中查询文档

    • find

      • 返回mongocxx::cursor
    • find_one
      • 返回std::optionalbsoncxx::document::value
      • 因此判断是否存在这个field只需像指针是否为空那样
      • 将返回的结果转换成json, bsoncxx::to_json()
  • 插入、更新、删除文档
    • insert_many insert_one
    • update_many update_one
    • delete_many delete_one
  • 多线程与连接池
    • 每个线程都有独立的client及其子类

参考文献

http://mongocxx.org/

https://stackoverflow.com/questions/35920013/new-c-mongo-driver-how-to-see-type-and-how-to-get-string-value

Mongodb主从复制/ 副本集/分片集群介绍

Connection String URI

https://docs.mongodb.com/ecosystem/drivers/

[MongoDB Connection String to Replica Set](MongoDB Connection String to Replica Set)

https://mongodb-documentation.readthedocs.io/en/latest/reference/connection-string.html#uri.replicaSet

https://stackoverflow.com/questions/23958759/mongodb-connection-string-to-replica-set

mongodb cxx driver学习的更多相关文章

  1. MongoDB数据库CXX Driver编译

    最近项目需要,想要测试下MongoDB读写大量小图片的速度(单纯文件系统io效率比较低,想试试NoSQL能不能提速), 因为使用C++开发,所以使用MongoDB的CXX驱动,需要自己编译,下面记录整 ...

  2. mongodb C++ Driver安装

    前言 mongocxx官网地址 http://mongocxx.org/?jmp=docs 本文的安装版本是:mongocxx-r3.2.0.tar.gz . 参考文档安装过程http://mongo ...

  3. MongoDB Java Driver操作指南

    MongoDB为Java提供了非常丰富的API操作,相比关系型数据库,这种NoSQL本身的数据也有点面向对象的意思,所以对于Java来说,Mongo的数据结构更加友好. MongoDB在今年做了一次重 ...

  4. MongoDB C Driver使用教程

    MongoDB C Driver使用教程 转载请注明出处http://www.cnblogs.com/oloroso/ 本指南提供简介 MongoDB C 驱动程序. 在 C API 的详细信息,请参 ...

  5. windows平台下安装、编译、使用mongodb C++ driver

    本博客将记录在Win8.1 ,VS2013环境下编译.配置mongodb C++ driver的流程. 1.下载预备 下载Boost:http://sourceforge.net/projects/b ...

  6. Ignoring Extra Elements in mongoDB C# Driver

    MongoDB删除字段后会报错: Element ... does not match any field or property of class Customer. 需要在实体类增加 [BsonI ...

  7. mongodb .net driver

    1.介绍 The official MongoDB .NET Driver provides asynchronous interaction with MongoDB. Powering the d ...

  8. Mongodb Java Driver 参数配置解析

    要正确使用Mongodb Java Driver,MongoClientOptions参数配置对数据库访问的并发性能影响极大. connectionsPerHost:与目标数据库能够建立的最大conn ...

  9. mongodb c++ driver(2.53)windows编译

    编译环境: (1) 下载python2.7, 使用x86_32位,因为scons只有32位安装包可用: (2) 下载scons2.3.0,The current production release ...

随机推荐

  1. 记一次深度系统安装至windows系统盘提示挂载为只读模式问题

    记一次深度系统安装至windows系统盘提示挂载为只读模式问题 来到新公司新电脑自己要安装deepin,安装的时候没考虑双系统直接装至默认win系统盘,导致deepin启动后提示如下: 提示多个挂载分 ...

  2. C#中用DateTime的ParseExact方法解析日期时间(excel中使用系统默认的日期格式)

    最近做的项目中服务器是英文的系统,系统需要通过excel的单元格导入日期,excel中的日期格式是系统默认的日期格式,如下图所示 以上日期格式,会跟着操作系统设置的日期格式相同例如我的中文系统的日期格 ...

  3. 开发环境 pyenv

    pyeny githup地址:https://github.com/pyenv/pyenv/ 安装时使用pyeny提供安装工具进行安装 githup 地址:https://github.com/pye ...

  4. 用自己的话简要阐述struts2的执行流程

    Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher.业务控制器Action和用户实现的企业业务逻辑组件.核心控制器FilterDispatcher是Struts ...

  5. C语言博客作业4--数组

    C语言博客作业4--数组 1.本章学习总结 1.1思维导图 请以思维导图总结本周的学习内容,如下图所示: 1.2本章学习体会及代码量学习体会 1.2.1学习体会 描述本周学习感受,也可以在这里提出你不 ...

  6. [C#]位运算符

    参考链接: http://www.runoob.com/csharp/csharp-operators.html 表: 简单来说,就是: &:全1为1,否则为0 |:有1为1,否则为0 ^:不 ...

  7. qt button clicked(bool) always false

    今天用 qt 中的按键的时候,希望按键有两种状态,通过 clicked(bool) 发送信号给槽,结果一直发的是 false,不能为 true,后来终于找到问题了,有两种解决方法. 在 button ...

  8. mySQL的表操作

    1.新建表 CREATE TABLE 表名 ( 属性名 数据类型 [完整约束条件], 属性名 数据类型 [完整约束条件], ... ... 属性名 数据类型 [完整约束条件] ); 2.删除表 DRO ...

  9. Django url

    urlpatterns = [ url(正则表达式, views视图函数,参数,别名),]     参数说明:   一个正则表达式字符串 一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符 ...

  10. sql中的常见报错;

    1.对于某些写的sql懒得判断的: SELECT * FROM sys_part WHERE part_no =(SELECT part_no FROM dbo.sys_part)  --字查询的结果 ...