参考链接
官网:https://docs.mongodb.com/manual/introduction/
中文文档:https://docs.mongoing.com/
遇到问题
什么是分片?
内存映射?
有了内存映射为什么还弄个Journal?
use创建集合后show dbs不能马上看到,要等一段时间?
嵌入式文档和数组减少了对连接的需求?
概念
MongoDB一台机器可以有多个实例,每个实例端口不同,dbpath不同
与redis区别:mongodb自带统计功能
CURD操作
db.inventory.find({}).pretty()
索引
聚合
聚合管道
集群
主从复制集群
复制集集群
允许从库读:rs.secondaryOk()
获取复制集状态:rs.status()
只有主节点才能被写入
分片集群
一个数据库被分散在多个分片,所有的分片组成一个数据库。
每个分片都是一个集群(复制集),提高写性能。
解决系统扩展的两个方法:垂直扩展和水平扩展
垂直扩展:升级单台服务器的硬解(CPU,内存,硬盘)
水平扩展:增加服务器
地区A访问地区B可以就近访问:将地区B的一个从节点(shardB)放在地区A。但是该从节点不能有选举权(也就是不能成为主节点),否则当shardB选举为主节点后,地区B的数据都写到shardB,并且数据又同步回地区B的从节点,这样跨区域写肯定是不行的。
MongoDB分片的单位是集合
客户端需要连接router,而不是直接连接分片节点
分片策略
哈希分片
范围分片
C/C++操作MongoDB
安装mongo-c-driver
#下载1.17.5版本的压缩包
wget https://github.com/mongodb/mongo-c-driver/releases/download/1.17.5/mongo-c-driver-1.17.5.tar.gz
#解压压缩包
tar zxvf mongo-c-driver-1.17.5.tar.gz
#进入目录
cd mongo-c-driver-1.17.5
mkdir build
cd build
cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF ..
make
sudo make install
lib:/usr/local/lib/
include:/usr/local/include/libmongoc-1.0
参考:http://mongoc.org/libmongoc/current/installing.html
安装mongo-cxx
#从github下载稳定版本,当前使用的是3.6.5版本,如果下载tar.gz包缺少EP_mnmlstc_core
git clone https://github.com/mongodb/mongo-cxx-driver.git --branch releases/stable --depth 1
#进入build目录
cd mongo-cxx-driver/build
cmake -DCMAKE_BUILD_TYPE=Release -DBSONCXX_POLY_USE_MNMLSTC=1 -DCMAKE_INSTALL_PREFIX=/usr/local ..
# sudo make EP_mnmlstc_core 这步骤不能漏
sudo make EP_mnmlstc_core
make
sudo make install
sudo ldconfig
# 编译对应的example范例(mongo-cxx-driver/examples)
make run-examples
安装路径:
lib:/usr/local/lib/
include:/usr/local/include/mongocxx
例子
编译helloworld:
gcc -o hello_mongoc hello_mongoc.c \
-I/usr/local/include/libbson-1.0 -I/usr/local/include/libmongoc-1.0 \
-lmongoc-1.0 -lbson-1.0