mongodb cxx driver学习
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中的结点,并动态维持最新的状态
安装
mongo-c-driver
- 是安装mongo-cxx-driver的基础
- 根据使用的mongo-cxx-driver,确定mongo-c-driver版本,可参考mongo-cxx-driver发布页面
- 两个库都使用cmake编译,
yum install cmake3 cmake3 -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF -DCMAKE_BUILD_TYPE=Release ..
mongo-cxx-driver
- 注意与mongo-c-driver相匹配
cmake3 -DCMAKE_BUILD_TYPE=Release -DBSONCXX_POLY_USE_BOOST=1 -DCMAKE_INSTALL_PREFIX=/usr/local ..
参考
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()
- find
- 插入、更新、删除文档
- 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学习的更多相关文章
- MongoDB数据库CXX Driver编译
最近项目需要,想要测试下MongoDB读写大量小图片的速度(单纯文件系统io效率比较低,想试试NoSQL能不能提速), 因为使用C++开发,所以使用MongoDB的CXX驱动,需要自己编译,下面记录整 ...
- mongodb C++ Driver安装
前言 mongocxx官网地址 http://mongocxx.org/?jmp=docs 本文的安装版本是:mongocxx-r3.2.0.tar.gz . 参考文档安装过程http://mongo ...
- MongoDB Java Driver操作指南
MongoDB为Java提供了非常丰富的API操作,相比关系型数据库,这种NoSQL本身的数据也有点面向对象的意思,所以对于Java来说,Mongo的数据结构更加友好. MongoDB在今年做了一次重 ...
- MongoDB C Driver使用教程
MongoDB C Driver使用教程 转载请注明出处http://www.cnblogs.com/oloroso/ 本指南提供简介 MongoDB C 驱动程序. 在 C API 的详细信息,请参 ...
- windows平台下安装、编译、使用mongodb C++ driver
本博客将记录在Win8.1 ,VS2013环境下编译.配置mongodb C++ driver的流程. 1.下载预备 下载Boost:http://sourceforge.net/projects/b ...
- Ignoring Extra Elements in mongoDB C# Driver
MongoDB删除字段后会报错: Element ... does not match any field or property of class Customer. 需要在实体类增加 [BsonI ...
- mongodb .net driver
1.介绍 The official MongoDB .NET Driver provides asynchronous interaction with MongoDB. Powering the d ...
- Mongodb Java Driver 参数配置解析
要正确使用Mongodb Java Driver,MongoClientOptions参数配置对数据库访问的并发性能影响极大. connectionsPerHost:与目标数据库能够建立的最大conn ...
- mongodb c++ driver(2.53)windows编译
编译环境: (1) 下载python2.7, 使用x86_32位,因为scons只有32位安装包可用: (2) 下载scons2.3.0,The current production release ...
随机推荐
- Django基础模型层(77-78)
jango框架之模型层(d77-78)一 单表操作: 1 mysql数据库:settings里配置 'default': { # key值必须都是大写 'ENGINE': 'django.d ...
- spring入门 依赖入注的三种方式(1)
第一种:构造器参数注入 第二种:setter方法属性注入(setter方法的规范-JavaBean规范) 第三种:接口注入 Bean 属性的注入:对一个对象的属性的赋值 1.构造器参数注入: publ ...
- zuul ci
. ├── a_module ├── b_module ├── lib ├── zuul │ ├── check │ ├── ci │ ├── gate │ ├── layout.ya ...
- Json解析注解 ---@SerializedName
项目前后端交互采用的是JSON传输,因为前后端沟通不多,经常造成数据格式不统一:在不想后台改动太多下,需要使用@SerializedName解决这个问题 解析数据使用的是Gson解析的json数据 @ ...
- vue文件上传
今天写一个文件上传的功能,开始想用element-ui的组件写,但是发现不知道怎么把文件标题和内容一起上传,所以用了经典的input框上传. 废话不多说,直接上代码. 这是表单: <el-for ...
- 初次安装Ubuntu后的若干配置步骤
第一步,安装VMware-tools 按照如下提示安装 首先将压缩包,复制到/home 目录下,将其解压,执行./vmware-install.pl即可 第二步,配置使linux能上网 首先将ubun ...
- vim 批量替换使用说明
基本语法: :[addr]s/源字符串/目的字符串/[option] 全局替换命令: :%s/源字符串/目的字符串/g [addr] 表示检索范围,省略时表示当前行. "1,20" ...
- app常见专项测试点
转载自 https://blog.csdn.net/xiaomaoxiao336368/article/details/84887948
- 新建DataTable
//创建DataTable DataTable dt = new DataTable("NewDt"); //创建自增长的ID列 DataColumn dc = dt.Column ...
- python深拷贝,浅拷贝
1.浅拷贝, 首先要引用copy包 from copy import copy class A: def __init__(self): self.A=1 self.B=2 a = A() copy( ...