• [技术干货] MongoDB 5.3.1 for openEuler 22.03 LTS 迁移指南
    #### 环境要求 | 项目 | 说明 | | ------ | :---------------------------- | | 服务器 | TaiShan 200服务器(型号2280) | | CPU | 华为鲲鹏920处理器 | | 硬盘 | 空间尽量大,至少100G。 | | 网络 | 通外网,有在线yum源和pip源。 | #### 操作系统 | 项目 | 版本 | 备注 | | ----------------- | --------- | ------------------ | | openEuler release | 22.03 LTS | cat /etc/*-release | #### 软件依赖 | 软件 | 版本 | | ------- | ------ | | gcc | 10.3.0 | | g++ | 10.3.0 | | python | 3.9 | | mongodb | 5.3.1 | #### 环境配置 ##### 配置python pip源 安装pip ```shell yum install python-pip ``` 创建.pip目录 ```shell mkdir -p ~/.pip ``` 创建 `pip.conf` 文件 ```shell vim pip.conf ``` 填写如下配置(华为pip镜像) ```ini [global] timeout=60 trusted-host=cmc-cd-mirror.rnd.huawei.com index-url=http://cmc-cd-mirror.rnd.huawei.com/pypi/simple/ ``` #### 安装依赖 ##### 安装编译工具 ```shell yum install -y tar zip unzip gzip gcc gcc-c++ make python cmake \ libcurl-devel openssl-devel python-pip ``` #### 编译安装 ##### 下载源码 ```shell git clone https://github.com/mongodb/mongo.git ``` ##### 进入源码目录 ```shell cd /home/mongo-r5.3.1 ``` ##### 安装python依赖 ```shell python3 -m pip install -r etc/pip/compile-requirements.txt ``` ##### 编译全部内容 ```shell python buildscripts/scons.py MONGO_VERSION=5.3.1 DESTDIR=/home/mongo --disable-warnings-as-errors CFLAGS="-march=armv8-a+crc" install-all-meta -j48 ``` 1. 报错 `Couldn't find OpenSSL crypto.h header and library` 解决:安装 `openssl-devel` ```shell yum install -y openssl-devel ``` ##### 给mongodb的可执行文件创建软链接 ```shell ln -s /home/mongo/bin/mongo /usr/bin/mongo ln -s /home/mongo/bin/mongod /usr/bin/mongod ``` ##### 运行单元测试 ```shell cd /home/mongo/bin # 列出所有单元测试 ./dbtest -l # 运行单个测试 ./dbtest query_plan_ranking ``` #### 启动MongoDB ##### 防火墙配置 开放27017端口 ```shell # 暂时开放27017端口 firewall-cmd --add-port=27017/tcp # 永久开放27017端口 firewall-cmd --permanent --add-port=27017/tcp # 重启防火墙 firewall-cmd --reload ``` 或者可以直接关闭防火墙 ```shell # 暂时关闭防火墙 systemctl stop firewalld # 永久关闭防火墙 systemctl disable firewalld ``` ##### 创建相关目录 ```shell # 数据目录 mkdir -p /var/lib/mongo # 日志目录 mkdir -p /var/log/mongodb ``` ##### 前台运行 ```shell # 使用root前台运行 mongod --dbpath=/var/lib/mongo --bind_ip=0.0.0.0 --port 27017 ``` ##### 后台运行 ```shell # 使用root后台运行 mongod --dbpath=/var/lib/mongo --fork --bind_ip=0.0.0.0 --port 27017 \ --logpath=/var/log/mongodb/mongodb.log --logappend ``` ##### 使用配置文件运行 ```shell # 拷一份配置文件 cp rpm/mongod.conf /etc/mongod.conf # 使用root运行 mongod -f /etc/mongod.conf ``` #### 配置用户、配置文件、权限 ##### 创建用户和组 ```shell useradd mongod ``` ##### 安装目录授权给 mongod ```shell chown -R mongod:mongod /home/mongo ``` ##### 创建日志目录并授权 ```shell rm -rf /var/log/mongodb mkdir -p /var/log/mongodb chown -R mongod:mongod /var/log/mongodb ``` ##### 创建数据目录并授权 ```shell rm -rf /var/lib/mongo mkdir -p /var/lib/mongo chown -R mongod:mongod /var/lib/mongo ``` ##### 创建pid目录 ```shell rm -rf /var/run/mongodb mkdir -p /var/run/mongodb chown -R mongod:mongod /var/run/mongodb ``` ##### 创建配置文件并授权 ```shell # 拷一份默认配置文件 cp rpm/mongod.conf /etc/mongod.conf ``` ##### 按需修改配置文件 ```yaml # network interfaces net: port: 27017 # 这里修改为0.0.0.0,否则外部无法访问 bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting. ``` ##### 拷贝一份环境变量文件 ```shell cp rpm/mongod.sysconfig /etc/sysconfig/mongod ``` ##### 修改权限 ```shell chown mongod:mongod /etc/sysconfig/mongod ``` #### 配置服务 ##### 复制一份服务脚本 ```shell cp rpm/init.d-mongod /etc/rc.d/init.d/mongod ``` ##### 添加可执行权限 ```shell chmod 755 /etc/rc.d/init.d/mongod ``` ##### 启动服务 ```shell /etc/rc.d/init.d/mongod start ``` ##### 加入开机启动服务列表 ```shell chkconfig --add mongod # 查看开机自启服务 chkconfig --list ``` ##### 启动服务 ```shell # 重新加载配置文件 systemctl daemon-reload # 启用mongod systemctl enable mongod # 启动mongod systemctl start mongod # 查看状态 systemctl status mongod ```
  • [技术干货] MongoDB 5.3增强时序数据能力
    MongoDB 5.3版本发布,为该数据库平台的用户提供了新功能,可帮助改进时间序列数据支持。 MongoDB是一个基于JSON的NoSQL文档数据库。近年来,MongoDB越来越多地支持额外的数据模型,成为所谓的多模型数据库。随着2021年7月推出的MongoDB 5.0数据库,该数据库供应商引入了时间序列数据支持。自MongoDB 5.0首次发布以来的几个月里,该公司发布了多个更新,作为其季度发布周期的一部分。在1月21日发布的MongoDB 5.2中,添加了可以帮助处理时间序列数据的新数据查询功能。 随着MongoDB 5.3的推出,时间序列数据再次成为更新的主要焦点,围绕着称为填充空白的特性提供了一组新功能。在时间序列数据中,传输数据的设备或传感器有时可能存在间隙。然后,这些差距可能会给依赖于数据库中连续数据条目的数据分析和运营用例带来挑战。填补空白提供了一组数据库方法来真正填补空白。 IDC公司分析师Carl Olofson解释说:“如果需要一个全面的时间序列API,填补空白是根本。”在MongoDB 5.3中,为什么对时序数据的空白填充很重要根据Olofson的说法,用户通常不仅会将数据移植到专门的时间序列数据集,而且还会使用组合工具来检查数据、检测空白、填补它们并进行分析。他说,在他看来,MongoDB 的承诺是,用户将有办法更容易有效利用时间序列数据。 填补空白的过程可能很棘手。Olofson指出,可以使用多种技术,具体取决于多个因素,例如值序列是否遵循可检测模式或看起来是随机,或者取决于其他一些因素。 Olofson 称:“我认为,对于创建可靠的数据平台,MongoDB包含填补空白很有必要,在这个平台上,一切都准备就绪,可用于进行可靠的时间序列分析。” MongoDB 5.3为用户提供了一系列空白填充功能,包括为缺失数据添加新条目的$densify和提供适当值的$fill。数据支持与MongoDB 5.3 MongoDB使用两种特定技术来启用空白填充,即$densify和$fill命令。 通过使用$densify,数据库为来自时间序列数据源(例如传感器)的缺失条目创建新文档。然后$fill命令为新条目提供实际值或数据。MongoDB开发者体验总监Jane Fine解释说,可以使用三种方法来填补空白:常量值、线性插值或将最后一个事件向前推进。 Fine称:“在绘制或分析时间序列数据时,填补空白是一个非常重要的工具。” MongoDB的下一个版本预计将是一次重大更新,将于6月推出MongoDB 6.0。下一次更新的功能包括一系列增强的安全功能,包括对用于加密密钥管理的密钥管理互操作性协议的增强支持。 来源:TechTarget中国
  • [技术干货] MongoDB 4.4.0(aarch64)编译指导 for openEuler 20.03 LTS SP1
    1 简介MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。官方链接: https://www.mongodb.com/类别:数据库语言:C++/JavaScript/Python/2 环境类别子项版本获取地址(方法) 硬件CPUIntel 5218iBMC网络Ethernet-10GEiBMC存储SATA 4TiBMC内存xxG xxxMHziBMCOSopenEuler20.03 LTS SP1cat /etc/os-releaseKernel4.19.90cat /proc/version软件GCC9.3.1参考下面安装说明 gcc -vOpenJDK 1.8.0_272参考下面安装说明MongoDB4.4.0参考下面安装说明3 系统依赖安装3.1 配置本地yum源挂载OS镜像:mount -o loop /home/openEuler-20.03-LTS-SP1-everything-aarch64-dvd.iso /mnt/iso/执行mv /etc/yum.repos.d /etc/yum.repos.d.bak备份默认yum源,然后mkdir /etc/yum.repos.d/创建/etc/yum.repos.d/路径,执行vim /etc/yum.repos.d/local.repo文件,配置yum本地源:[local]name=localbaseurl= file:///mnt/isogpgcheck=0enabled=1运行下面的命令,使yum源配置生效:yum clean allyum makecache3.2 安装GCC等相关依赖yum安装GCC、Python3等相关依赖:sudo yum install -y snappy snappy-devel autoconf automake libtool git gcc* make cmake openssl openssl-devel zlib zlib-devel bzip2 bzip2-devel bzip2-libs readline readline-devel bison zip unzip tar tcl java-1.8.0* bison* ncurses* wget libyaml libyaml-devel python-setuptools libcurl-devel python-devel gmp gmp-devel mpfr mpfr-devel libmpc libmpc-devel libpcap-dev* python3*4 编译依赖安装4.1 安装Kunpeng gcc 9.3.1注:MongoDB 4.4.0编译依赖8.2.0及更新版本的gcc,需要先升级gcc版本到8.2.0或以上版本;1、下载Kunpeng gcc-9.3.1二进制包wget https://mirror.iscas.ac.cn/kunpeng/archive/compiler/kunpeng_gcc/gcc-9.3.1-2021.03-aarch64-linux.tar.gztar zxvf gcc-9.3.1-2021.03-aarch64-linux.tar.gz注:如果系统环境无法联网,则手动点击https://mirror.iscas.ac.cn/kunpeng/archive/compiler/kunpeng_gcc/gcc-9.3.1-2021.03-aarch64-linux.tar.gz下载gcc-9.3.1-2021.03-aarch64-linux.tar.gz后传到系统/home/路径下。2、进入解压目录cd gcc-9.3.1-2021.03-aarch64-linux/3、配置环境变量,在/etc/profile文件其末尾添加如下内容:export PATH=/home/gcc-9.3.1-2021.03-aarch64-linux/bin:$PATHexport INCLUDE=/home/gcc-9.3.1-2021.03-aarch64-linux/include:$INCLUDEexport LD_LIBRARY_PATH=/home/gcc-9.3.1-2021.03-aarch64-linux/lib64:$LD_LIBRARY_PATH【注】:执行source /etc/profile使环境变量生效;4、查看gcc版本gcc -v5、备份系统自带gcc版本的gcc、g++和c++mv /usr/bin/gcc /usr/bin/gcc.bakmv /usr/bin/g++ /usr/bin/g++.bakmv /usr/bin/c++ /usr/bin/c++.bak6、创建Kunpeng gcc的gcc、g++、c++、cc、cc1和libstdc++.so.6软链接ln -sf /home/gcc-9.3.1-2021.03-aarch64-linux/bin/gcc /usr/bin/gccln -sf /home/gcc-9.3.1-2021.03-aarch64-linux/bin/g++ /usr/bin/g++ln -sf /home/gcc-9.3.1-2021.03-aarch64-linux/bin/c++ /usr/bin/c++ln -sf /home/gcc-9.3.1-2021.03-aarch64-linux/bin/gcc /usr/bin/ccln -sf /home/gcc-9.3.1-2021.03-aarch64-linux/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6ln -sf /home/gcc-9.3.1-2021.03-aarch64-linux/libexec/gcc/aarch64-linux-gnu/9.3.1/cc1 /usr/bin/cc1 4.2 编译安装cython1、进入/hom目录获取cython源码cd /home/git clone https://github.com/cython/cython.git注:如果系统环境无法联网,则手动单击链接https://github.com/cython/cython.git打开网页,然后单击“Download ZIP”下载安装包,并上传到系统的/home/目录下。2、安装cypthoncd /home/cythonpython3 setup.py install注:系统环境无法联网情况下,执行如下命令安装cypthonunzip cython-master.zipcd /home/cython-masterpython3 setup.py install4.3 编译安装pyyaml1、进入/hom目录获取pyyaml源码cd /home/git clone https://github.com/yaml/pyyaml.git注:如果系统环境无法联网,则手动单击链接https://github.com/yaml/pyyaml.git打开网页,然后单击“Download ZIP”下载安装包,并上传到系统的/home/目录下。2、安装pyyamlcd /home/pyyamlpython3 setup.py install注:系统环境无法联网情况下,执行如下命令安装pyyamlunzip pyyaml-master.zipcd /home/pyyaml-masterpython3 setup.py install4.4 编译安装typing 3.10.0.01、进入/hom目录获取typing 3.10.0.0源码cd /home/wget https://files.pythonhosted.org/packages/b0/1b/835d4431805939d2996f8772aca1d2313a57e8860fec0e48e8e7dfe3a477/typing-3.10.0.0.tar.gz注:如果系统环境无法联网,则手动单击链接https://files.pythonhosted.org/packages/b0/1b/835d4431805939d2996f8772aca1d2313a57e8860fec0e48e8e7dfe3a477/typing-3.10.0.0.tar.gz载typing-3.10.0.0.tar.gz并上传到系统的/home/目录下。2、安装typing 3.10.0.0tar xf typing-3.10.0.0.tar.gzcd /home/typing-3.10.0.0python3 setup.py install4.5 编译安装cheetah31、进入/hom目录获取cheetah3源码cd /home/git clone https://github.com/CheetahTemplate3/cheetah3.git注:如果系统环境无法联网,则手动单击链接https://github.com/CheetahTemplate3/cheetah3.git打开网页,然后单击“Download ZIP”下载安装包,并上传到系统的/home/目录下。2、安装cheetah3cd /home/cheetah3python3 setup.py install注:系统环境无法联网情况下,执行如下命令安装cheetah3unzip cheetah3-master.zipcd /home/cheetah3-masterpython3 setup.py install4.6 编译安装psutil 5.8.01、进入/hom目录获取psutil 5.8.0源码cd /home/wget https://files.pythonhosted.org/packages/e1/b0/7276de53321c12981717490516b7e612364f2cb372ee8901bd4a66a000d7/psutil-5.8.0.tar.gz注:如果系统环境无法联网,则手动单击链接https://files.pythonhosted.org/packages/e1/b0/7276de53321c12981717490516b7e612364f2cb372ee8901bd4a66a000d7/psutil-5.8.0.tar.gz下载psutil-5.8.0.tar.gz并上传到系统的/home/目录下。2、安装psutil 5.8.0tar xf psutil-5.8.0.tar.gzcd /home/psutil-5.8.0python3 setup.py install4.7 编译安装pymongo 4.0.11、进入/hom目录获取pymongo 4.0.1源码cd /home/wget https://files.pythonhosted.org/packages/3f/ff/7ec17064d403799d644f7db9c2e99202441849aebe771efe3199f3dd9076/pymongo-4.0.1.tar.gz注:如果系统环境无法联网,则手动单击链接https://files.pythonhosted.org/packages/3f/ff/7ec17064d403799d644f7db9c2e99202441849aebe771efe3199f3dd9076/pymongo-4.0.1.tar.gz下载pymongo-4.0.1.tar.gz并上传到系统的/home/目录下。2、安装pymongo 4.0.1tar xf pymongo-4.0.1.tar.gzcd /home/pymongo-4.0.1python3 setup.py install4.8 编译安装pathlib 1.0.11、进入/hom目录获取pathlib 1.0.1源码cd /home/wget https://files.pythonhosted.org/packages/ac/aa/9b065a76b9af472437a0059f77e8f962fe350438b927cb80184c32f075eb/pathlib-1.0.1.tar.gz注:如果系统环境无法联网,则手动单击链接https://files.pythonhosted.org/packages/ac/aa/9b065a76b9af472437a0059f77e8f962fe350438b927cb80184c32f075eb/pathlib-1.0.1.tar.gz下载pathlib-1.0.1.tar.gz并上传到系统的/home/目录下。2、安装pathlib 1.0.1tar xf pathlib-1.0.1.tar.gzcd /home/pathlib-1.0.1python3 setup.py install4.9 编译安装pathlib2 2.3.61、进入/hom目录获取pathlib2 2.3.6源码cd /home/wget https://files.pythonhosted.org/packages/df/16/e9d6bcf1aed52a55bc1696324ab22586716053b3e97b85266e0f3ad36bae/pathlib2-2.3.6.tar.gz注:如果系统环境无法联网,则手动单击链接https://files.pythonhosted.org/packages/df/16/e9d6bcf1aed52a55bc1696324ab22586716053b3e97b85266e0f3ad36bae/pathlib2-2.3.6.tar.gz下载pathlib2-2.3.6.tar.gz并上传到系统的/home/目录下。2、安装pathlib2 2.3.6tar xf pathlib2-2.3.6.tar.gzcd /home/pathlib2-2.3.6python3 setup.py install4.10 编译安装scandir 1.10.01、进入/hom目录获取scandir 1.10.0源码cd /home/wget https://files.pythonhosted.org/packages/df/f5/9c052db7bd54d0cbf1bc0bb6554362bba1012d03e5888950a4f5c5dadc4e/scandir-1.10.0.tar.gz注:如果系统环境无法联网,则手动单击链接https://files.pythonhosted.org/packages/df/f5/9c052db7bd54d0cbf1bc0bb6554362bba1012d03e5888950a4f5c5dadc4e/scandir-1.10.0.tar.gz下载scandir-1.10.0.tar.gz并上传到系统的/home/目录下。2、安装scandir 1.10.0tar xf scandir-1.10.0.tar.gzcd /home/scandir-1.10.0python3 setup.py install4.11 编译安装regex 2021.11.101、进入/hom目录获取regex 2021.11.10源码cd /home/wget https://files.pythonhosted.org/packages/97/cd/93ad08b2f97ec95da0bd860380ce0ac7481eaccc760356ee11eda369c048/regex-2021.11.10.tar.gz注:如果系统环境无法联网,则手动单击链接https://files.pythonhosted.org/packages/97/cd/93ad08b2f97ec95da0bd860380ce0ac7481eaccc760356ee11eda369c048/regex-2021.11.10.tar.gz下载regex-2021.11.10.tar.gz并上传到系统的/home/目录下。2、安装regex 2021.11.10tar xf regex-2021.11.10.tar.gzcd /home/regex-2021.11.10python3 setup.py install4.12 编译安装Scons 4.3.01、进入/hom目录获取Scons 4.3.0源码cd /home/wget https://files.pythonhosted.org/packages/64/a1/9dc5c5e43b3d1b1832da34c8ae7b239a8f2847c33509fa0eb011fd8bc1ad/SCons-4.3.0.tar.gz注:如果系统环境无法联网,则手动单击链接https://files.pythonhosted.org/packages/64/a1/9dc5c5e43b3d1b1832da34c8ae7b239a8f2847c33509fa0eb011fd8bc1ad/SCons-4.3.0.tar.gz下载SCons-4.3.0.tar.gz并上传到系统的/home/目录下。2、安装Scons 4.3.0tar xf SCons-4.3.0.tar.gzcd /home/SCons-4.3.0python3 setup.py install  5 编译安装1、下载MongoDB 4.4.0源码wget https://github.com/mongodb/mongo/archive/r4.4.0.tar.gz -O mongo-r4.4.0.tar.gztar xf mongo-r4.4.0.tar.gz注:如果系统环境无法联网,则手动点击https://github.com/mongodb/mongo/archive/r4.4.0.tar.gz下载mongo-r4.4.0.tar.gz后传到系统/home/路径下。2、进入解压目录cd mongo-r4.4.0/3、安装python依赖python3 -m pip install -r etc/pip/compile-requirements.txt4、创建MongoDB安装路径并执行编译(编译安装路径空间需要大于500G)mkdir -p /home/local/mongopython3 buildscripts/scons.py MONGO_VERSION=4.4.0 install-all CFLAGS="-march=armv8-a+crc -mtune=generic" -j64 DESTDIR=/home/local/mongo --disable-warnings-as-errors5、查看编译后路径cd /home/local/mongo/6、删除调试信息并查看编译后的二进制文件cd bin/strip mongosstrip mongodstrip mongo  6 验证1、查看MongoDB版本/home/local/mongo/bin/mongod --version2、创建dbpath路径并启动MongoDB数据库mkdir -p /data/db./mongod &3、查看数据库进程是否正常启动ps -ef | grep mongod4、登录mongodb数据库并查看当前存在的数据库./mongoshow dbs5、退出数据库并查看dbpath文件exitls /data/db/  7 参考信息1、https://www.cnblogs.com/hiyang/p/13560493.html2、https://support.huaweicloud.com/prtg-kunpengdbs/kunpengmongodb_02_0012.html3、https://github.com/mongodb/mongo/blob/master/docs/building.md  8 FAQ1、执行./mongod启动MongoDB失败,报“/data/db not found”错误【详细描述】:执行./mongod启动MongoDB失败,报“/data/db not found”错误,具体报错如下:解答:执行mkdir -p /data/db命令创建dbpath路径,再次执行./mongod &启动MongoDB数据库。
  • [技术干货] 鲲鹏上编译mongodb 4.4版本报build arm64/crc32-arm64.o failed: Error解决方法
    【问题描述】鲲鹏上编译mongodb 4.4版本报build/opt/third_party/wiredtiger/src/checksum/arm64/crc32-arm64.o failed: Error 1错误,详细报错如下:scons: *** [build/opt/third_party/wiredtiger/src/checksum/arm64/crc32-arm64.o] Error 1scons: building terminated because of errors.build/opt/third_party/wiredtiger/src/checksum/arm64/crc32-arm64.o failed: Error 1【解决方法】在编译命令中增加CFLAGS="-march=armv8-a+crc -mtune=generic",详细命令参考如下:python3 buildscripts/scons.py MONGO_VERSION=4.4.0 install-all CFLAGS="-march=armv8-a+crc -mtune=generic" -j64 DESTDIR=/home/local/mongo --disable-warnings-as-errors
  • [技术干货] MongoDB使用场景总结
    很多人比较关心 MongoDB 的适用场景,也有用户在话题里分享了自己的业务场景,比如案例1用在应用服务器的日志记录,查找起来比文本灵活,导出也很方便。也是给应用练手,从外围系统开始使用MongoDB。• 用在一些第三方信息的获取或者抓取,因为MongoDB的schema-less,所有格式灵活,不用为了各种格式不一样的信息专门设计统一的格式,极大的减少开发的工作。案例2mongodb之前有用过,主要用来存储一些监控数据,No schema 对开发人员来说,真的很方便,增加字段不用改表结构,而且学习成本极低。案例3使用MongoDB做了O2O快递应用,·将送快递骑手、快递商家的信息(包含位置信息)存储在 MongoDB,然后通过 MongoDB 的地理位置查询,这样很方便的实现了查找附近的商家、骑手等功能,使得快递骑手能就近接单,目前在使用MongoDB 上没遇到啥大的问题,官网的文档比较详细,很给力。经常跟一些同学讨论 MongoDB 业务场景时,会听到类似『你这个场景 mysql 也能解决,没必要一定用 MongoDB』的声音,的确,并没有某个业务场景必须要使用 MongoDB才能解决,但使用 MongoDB 通常能让你以更低的成本解决问题(包括学习、开发、运维等成本),下面是 MongoDB 的主要特性,大家可以对照自己的业务需求看看,匹配的越多,用 MongoDB 就越合适。MongoDB 特性优势事务支持MongoDB 目前只支持单文档事务,需要复杂事务支持的场景暂时不适合灵活的文档模型JSON 格式存储最接近真实对象模型,对开发者友好,方便快速开发迭代高可用复制集满足数据高可靠、服务高可用的需求,运维简单,故障自动切换可扩展分片集群海量数据存储,服务能力水平扩展高性能mmapv1、wiredtiger、mongorocks(rocksdb)、in-memory 等多引擎支持满足各种场景需求强大的索引支持地理位置索引可用于构建 各种 O2O 应用、文本索引解决搜索的需求、TTL索引解决历史数据自动过期的需求Gridfs解决文件存储的需求aggregation & mapreduce解决数据分析场景需求,用户可以自己写查询语句或脚本,将请求都分发到 MongoDB 上完成从目前阿里云 MongoDB 云数据库上的用户看,MongoDB 的应用已经渗透到各个领域,比如游戏、物流、电商、内容管理、社交、物联网、视频直播等,以下是几个实际的应用案例。• 游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新• 物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。• 社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能• 物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析• 视频直播,使用 MongoDB 存储用户信息、礼物信息等• ......如果你还在为是否应该使用 MongoDB,不如来做几个选择题来辅助决策(注:以下内容改编自 MongoDB 公司 TJ 同学的某次公开技术分享)。应用特征Yes / No应用不需要事务及复杂 join 支持必须 Yes新应用,需求会变,数据模型无法确定,想快速迭代开发?应用需要2000-3000以上的读写QPS(更高也可以)?应用需要TB甚至 PB 级别数据存储?应用发展迅速,需要能快速水平扩展?应用要求存储的数据不丢失?应用需要99.999%高可用?应用需要大量的地理位置查询、文本查询?如果上述有1个 Yes,可以考虑 MongoDB,2个及以上的 Yes,选择MongoDB绝不会后悔。到此这篇关于MongoDB使用场景总结的文章就介绍到这了。转载自https://www.jb51.net/article/238542.htm
  • [技术干货] SpringBoot 整合mongoDB并自定义连接池的示例代码
    得力于SpringBoot的特性,整合mongoDB是很容易的,我们整合mongoDB的目的就是想用它给我们提供的mongoTemplate,它可以很容易的操作mongoDB数据库。为了自定义连接池,我们在配置类中主要与MongoClientOptions、MongoCredential、MongoClient、MongoDbFactory打交道。最终的目的就是配置好一个MongoDbFactory的bean交由Spring管理。Maven 依赖1234<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>配置文件123456789101112131415161718192021mongodb:  database: bfa_mongo  username: "xxx"  password: "xxxxx"  address: "host:port"  authenticationDatabase: [设置你的认证数据库,如果有的话]  # 连接池配置  clientName: ${spring.application.name} # 客户端的标识,用于定位请求来源等  connectionTimeoutMs: 10000     # TCP连接超时,毫秒  readTimeoutMs: 15000       # TCP读取超时,毫秒  poolMaxWaitTimeMs: 3000        #当连接池无可用连接时客户端阻塞等待的时长,单位毫秒  connectionMaxIdleTimeMs: 60000   #TCP连接闲置时间,单位毫秒  connectionMaxLifeTimeMs: 120000    #TCP连接最多可以使用多久,单位毫秒  heartbeatFrequencyMs: 20000      #心跳检测发送频率,单位毫秒  minHeartbeatFrequencyMs: 8000    #最小的心跳检测发送频率,单位毫秒  heartbeatConnectionTimeoutMs: 10000  #心跳检测TCP连接超时,单位毫秒  heartbeatReadTimeoutMs: 15000    #心跳检测TCP连接读取超时,单位毫秒  connectionsPerHost: 20       # 每个host的TCP连接数  minConnectionsPerHost: 5     #每个host的最小TCP连接数  #计算允许多少个线程阻塞等待可用TCP连接时的乘数,算法:threadsAllowedToBlockForConnectionMultiplier*connectionsPerHost,当前配置允许10*20个线程阻塞  threadsAllowedToBlockForConnectionMultiplier: 10注意:其中的address参数可以配置为一个数组(代表集群模式)123address:    - "host:port"   - "host2:port2"MongoConfig配置类配置类中使用了lombok,如果你没有用lombok依赖和IDE插件,你要重写getter、Setter方法:代码稍长,可以复制在IDEA中查看:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163import com.mongodb.MongoClient;import com.mongodb.MongoClientOptions;import com.mongodb.MongoCredential;import com.mongodb.ServerAddress;import lombok.Getter;import lombok.Setter;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.BeanFactory;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.data.mongodb.MongoDbFactory;import org.springframework.data.mongodb.core.SimpleMongoDbFactory;import org.springframework.data.mongodb.core.convert.DbRefResolver;import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;import org.springframework.data.mongodb.core.convert.MappingMongoConverter;import org.springframework.data.mongodb.core.convert.MongoCustomConversions;import org.springframework.data.mongodb.core.mapping.MongoMappingContext;import org.springframework.validation.annotation.Validated; import javax.validation.constraints.Min;import javax.validation.constraints.NotNull;import javax.validation.constraints.Size;import java.util.ArrayList;import java.util.Arrays;import java.util.List; @Slf4j@Configuration@EnableConfigurationProperties(MongoConfig.MongoClientOptionProperties.class)public class MongoConfig {     /**     * monogo 转换器     * @return     */    @Bean    public MappingMongoConverter mappingMongoConverter(MongoDbFactory factory,                                                       MongoMappingContext context, BeanFactory beanFactory, MongoCustomConversions conversions) {        DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);        MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context);        // remove _class field//    mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));        mappingConverter.setCustomConversions(conversions);        return mappingConverter;    }     /**     * 自定义mongo连接池     * @param properties     * @return     */    @Bean    public MongoDbFactory mongoDbFactory(MongoClientOptionProperties properties) {        //创建客户端参数        MongoClientOptions options = mongoClientOptions(properties);         //创建客户端和Factory        List<ServerAddress> serverAddresses = new ArrayList<>();        for (String address : properties.getAddress()) {            String[] hostAndPort = address.split(":");            String host = hostAndPort[0];            Integer port = Integer.parseInt(hostAndPort[1]);            ServerAddress serverAddress = new ServerAddress(host, port);            serverAddresses.add(serverAddress);        }         //创建认证客户端        MongoCredential mongoCredential = MongoCredential.createScramSha1Credential(properties.getUsername(),                properties.getAuthenticationDatabase() != null ? properties.getAuthenticationDatabase() : properties.getDatabase(),                properties.getPassword().toCharArray());         MongoClient mongoClient = new MongoClient(serverAddresses.get(0), mongoCredential, options);        //集群模式        if (serverAddresses.size() > 1) {            mongoClient = new MongoClient(serverAddresses, new ArrayList<>(Arrays.asList(mongoCredential)));        }        /** ps: 创建非认证客户端*/        //MongoClient mongoClient = new MongoClient(serverAddresses, mongoClientOptions);        return new SimpleMongoDbFactory(mongoClient, properties.getDatabase());    }     /**     * mongo客户端参数配置     * @return     */    public MongoClientOptions mongoClientOptions(MongoClientOptionProperties properties) {        return MongoClientOptions.builder()                .connectTimeout(properties.getConnectionTimeoutMs())                .socketTimeout(properties.getReadTimeoutMs()).applicationName(properties.getClientName())                .heartbeatConnectTimeout(properties.getHeartbeatConnectionTimeoutMs())                .heartbeatSocketTimeout(properties.getHeartbeatReadTimeoutMs())                .heartbeatFrequency(properties.getHeartbeatFrequencyMs())                .minHeartbeatFrequency(properties.getMinHeartbeatFrequencyMs())                .maxConnectionIdleTime(properties.getConnectionMaxIdleTimeMs())                .maxConnectionLifeTime(properties.getConnectionMaxLifeTimeMs())                .maxWaitTime(properties.getPoolMaxWaitTimeMs())                .connectionsPerHost(properties.getConnectionsPerHost())                .threadsAllowedToBlockForConnectionMultiplier(                        properties.getThreadsAllowedToBlockForConnectionMultiplier())                .minConnectionsPerHost(properties.getMinConnectionsPerHost()).build();    }     @Getter    @Setter    @Validated    @ConfigurationProperties(prefix = "mongodb")    public static class MongoClientOptionProperties {         /** 基础连接参数 */        private String database;        private String username;        private String password;        @NotNull        private List<String> address;        private String authenticationDatabase;         /** 客户端连接池参数 */        @NotNull        @Size(min = 1)        private String clientName;        /** socket连接超时时间 */        @Min(value = 1)        private int connectionTimeoutMs;        /** socket读取超时时间 */        @Min(value = 1)        private int readTimeoutMs;        /** 连接池获取链接等待时间 */        @Min(value = 1)        private int poolMaxWaitTimeMs;        /** 连接闲置时间 */        @Min(value = 1)        private int connectionMaxIdleTimeMs;        /** 连接最多可以使用多久 */        @Min(value = 1)        private int connectionMaxLifeTimeMs;        /** 心跳检测发送频率 */        @Min(value = 2000)        private int heartbeatFrequencyMs;         /** 最小的心跳检测发送频率 */        @Min(value = 300)        private int minHeartbeatFrequencyMs;        /** 计算允许多少个线程阻塞等待时的乘数,算法:threadsAllowedToBlockForConnectionMultiplier*connectionsPerHost */        @Min(value = 1)        private int threadsAllowedToBlockForConnectionMultiplier;        /** 心跳检测连接超时时间 */        @Min(value = 200)        private int heartbeatConnectionTimeoutMs;        /** 心跳检测读取超时时间 */        @Min(value = 200)        private int heartbeatReadTimeoutMs;         /** 每个host最大连接数 */        @Min(value = 1)        private int connectionsPerHost;        /** 每个host的最小连接数 */        @Min(value = 1)        private int minConnectionsPerHost;    }}MappingMongoConverter可以自定义mongo转换器,主要自定义存取mongo数据时的一些操作,例如 mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null)) 方法会将mongo数据中的_class字段去掉。最后通过 new SimpleMongoDbFactory(mongoClient, properties.getDatabase())方法配置了一个MongoDbFactory交由Spring管理,Springboot会拿这个MongoDbFactory工厂bean来new一个MongoTemplate,在MongoDbFactoryDependentConfiguration类下可以看到SpringBoot帮你做得事:1234567891011121314151617181920212223242526272829/** * Configuration for Mongo-related beans that depend on a {@link MongoDbFactory}. * * @author Andy Wilkinson */@Configuration@ConditionalOnBean(MongoDbFactory.class)class MongoDbFactoryDependentConfiguration {     private final MongoProperties properties;    MongoDbFactoryDependentConfiguration(MongoProperties properties) {        this.properties = properties;    }         //SpringBoot创建MongoTemplate实例    @Bean    @ConditionalOnMissingBean    public MongoTemplate mongoTemplate(MongoDbFactory mongoDbFactory, MongoConverter converter) {        return new MongoTemplate(mongoDbFactory, converter);    @ConditionalOnMissingBean(MongoConverter.class)    public MappingMongoConverter mappingMongoConverter(MongoDbFactory factory, MongoMappingContext context,            MongoCustomConversions conversions) {        DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);        MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context);        mappingConverter.setCustomConversions(conversions);        return mappingConverter;         //...}SpringBoot利用我们配置好的MongoDbFactory在配置类中生成一个MongoTemplate,之后我们就可以在项目代码中直接@Autowired了。因为用于生成MongoTemplate的MongoDbFactory是我们自己在MongoConfig配置类中生成的,所以我们自定义的连接池参数也就生效了。到此这篇关于SpringBoot 整合mongoDB并自定义连接池的文章就介绍到这了转载自https://www.jb51.net/article/238879.htm
  • [技术干货] 华为云鲲鹏论坛2月热门问题汇总
    1.【openeuler】【pip功能】pip安装后无法使用 https://bbs.huaweicloud.com/forum/thread-180443-1-1.html 2.【鲲鹏架构】【安装mongodb】按照指导配置编译环境pyyaml,安装时报错 https://bbs.huaweicloud.com/forum/thread-176464-1-1.html 3.【弹性云服务器ECS】【yum安装.net】安装.net失败 https://bbs.huaweicloud.com/forum/thread-180476-1-1.html 4.【openeuler产品】【uwsgi功能】安装uwsgi失败 https://bbs.huaweicloud.com/forum/thread-180526-1-1.html 5.【送餐机器人产品】【底座功能】请教寻求送餐机器人底座核心模块 https://bbs.huaweicloud.com/forum/thread-180340-1-1.html 6.【中标麒麟】程序无法daemon运行 https://bbs.huaweicloud.com/forum/thread-180495-1-1.html 7.web挂在鲲鹏服务器上半小时左右就访问不了了,端口也关闭了,这是怎么回事 https://bbs.huaweicloud.com/forum/thread-180399-1-1.html 8.【鲲鹏920产品】【国密nginx功能】银河麒麟系统+鲲鹏920能实现国密nginx吗?求教程 https://bbs.huaweicloud.com/forum/thread-180263-1-1.html 9.鲲鹏云服务器上strcpy函数计算有问题,结果不对 https://bbs.huaweicloud.com/forum/thread-180199-1-1.html 10.鲲鹏服务器上无法安装superset https://bbs.huaweicloud.com/forum/thread-180012-1-1.html 11.【鲲鹏PC产品】【鲲鹏服务器开发】可以在鲲鹏PC开发,后部署在鲲鹏服务器上运行吗? https://bbs.huaweicloud.com/forum/thread-179855-1-1.html 12.【鲲鹏服务器】【动态库兼容问题】ELF load command alignment not page-aligned https://bbs.huaweicloud.com/forum/thread-179867-1-1.html 13.【鲲鹏架构服务器安装mongodb】【安装mongodb】为什么鲲鹏架构服务器安装mongodb,解压编译需要100多g磁盘空间 https://bbs.huaweicloud.com/forum/thread-179597-1-1.html 14.【D920S10主板】【升级BIOS】安装Ubuntu报ACPI CPPC的错误 https://bbs.huaweicloud.com/forum/thread-179497-1-1.html 15.【kunpeng920】【perf】请问dtlb_load_misses.walk_duration 这个事件怎么查到? 谢谢! https://bbs.huaweicloud.com/forum/thread-162174-1-1.html 16.yum install javapackages-local 鲲鹏 欧拉无法安装依赖 https://bbs.huaweicloud.com/forum/thread-178019-1-1.html 17.【sentry cdh630编译】【监控页面打不开】 sentry cdh编译完成后,监控页面访问失败 https://bbs.huaweicloud.com/forum/thread-105077-1-1.html 18.【openEuler+鲲鹏架构服务器】【mongodb安装】mongodb安装为什么需要100g以上的磁盘空间 https://bbs.huaweicloud.com/forum/thread-176927-1-1.html 19.【鲲鹏架构服务器】【安装mongodb】mongodb安装占用磁盘过多,40g磁盘占用完,有没有更加好的安装方法 https://bbs.huaweicloud.com/forum/thread-176507-1-1.html 20.【openEuler+鲲鹏架构服务器对应版本的组件下载】【mongdb、mlysql如何下载】 https://bbs.huaweicloud.com/forum/thread-176112-1-1.html
  • [问题求助] 【鲲鹏架构服务器安装mongodb】【安装mongodb】为什么鲲鹏架构服务器安装mongodb,解压编译需要100多g磁盘空间
    【功能模块】【鲲鹏架构服务器安装mongodb】【安装mongodb】【操作步骤&问题现象】1、【鲲鹏架构服务器安装mongodb】【安装mongodb】,解压编译需要100多g磁盘空间,x86的系统安装占用不到1个g磁盘空间,是为什么呢2、我们购买的云服务器资源都是不到100g磁盘空间的,可以明确一下具体原因吗?请看截图信息(鲲鹏官方套件指导要求至少需要150g磁盘空间)【截图信息】鲲鹏官方套件指导地址:https://support.huaweicloud.com/instg-kunpengdbs/kunpengmongodb_03_0002.html鲲鹏官方套件操作系统要求如下:操作系统要求操作系统要求如表2所示。表2 操作系统要求项目版本备注CentOS7.6 for ARMcat /etc/*-releaseopenEuler20.03 (LTS-SP1) for ARMcat /etc/*-release说明:1.如果是全新安装操作系统,可选择“Minimal Install”安装方式并勾选Development Tools套件,否则很多软件包需要手动安装。2.MongoDB 4.0.12在安装的时候,/root分区大小设置不小于50G,执行df -h /root或者lsblk查看/root分区大小。3.MongoDB编译目录建议大于150G(MongoDB文件解压并编译后目录大小为133G)。【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【openEuler+鲲鹏架构服务器】【mongodb安装】mongodb安装为什么需要100g以上的磁盘空间
    【功能模块】openEuler+鲲鹏架构服务器】【mongodb安装】【操作步骤&问题现象】1、openEuler+鲲鹏架构服务器,mongodb安装为什么需要100g以上的磁盘空间,40g不够吗2、openEuler+x86的华为云服务器安装mongodb,几个g都不要,是为什么呢,请给明确点的回复,我们正在安装使用,另外如果有简单安装方式,请提供一下【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【鲲鹏架构服务器】【安装mongodb】mongodb安装占用磁盘过多,40g磁盘占用完,有没有更加好的安装方法
    【功能模块】【鲲鹏架构服务器】【安装mongodb】【操作步骤&问题现象】1、mongodb安装占用磁盘过多,40g磁盘占用完,有没有更加好的安装方法2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【鲲鹏架构】【安装mongodb】按照指导配置编译环境pyyaml,安装时报错
    【功能模块】鲲鹏架构安装mongodb【操作步骤&问题现象】1、按照指导,到配置编译环境pyyaml这一步,安装时报错2、【截图信息】按照指导进行操作:2.安装时报错离线下载安装也报错,缺少内容。线上安装比较方便,线上安装问题如何解决?【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] MongoDB 基础操作
    创建数据库use DATABASE_NAME如果数据库不存在,则创建数据库,否则切换到指定数据库。show dbs 命令: 显示所有数据库删除当前数据库db.dropDatabase()集合删除db.collection.drop()插入文档MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:db.COLLECTION_NAME.insert(document) 或 db.COLLECTION_NAME.save(document)save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne() 或 db.collection.replaceOne() 来代替。insert(): 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。更新文档update() 方法用于更新已存在的文档db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )参数说明:query : update的查询条件,类似sql update查询内where后面的。update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。writeConcern :可选,抛出异常的级别。删除文档remove() 方法的基本语法格式db.collection.remove( <query>, <justOne> )参数说明:query :(可选)删除的文档的条件。justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。writeConcern :(可选)抛出异常的级别。查询文档:MongoDB 查询文档使用 find() 方法。db.collection.find(query, projection)query :可选,使用查询操作符指定查询条件projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
  • [技术干货] 安装配置mongodb 数据库与一些错误解决办法
    下载地址:https://www.mongodb.com/try/download/community (因为链接文字有一些会出现一些无法访问,直接复制。)需要注意因为我们下载时的版本号x.y.z   y为偶数是稳定版本,当然现在官网下载都是偶数版本没必要去考虑这些了。下载的是msi版本的安装就是为了方便.安装大都都是QQ的安装步骤只是我们切换安路劲和一些图形化界面的安装.我们只是单独作为服务器,所以没有那么搞得需求1、自定义安装路劲2、不需要安装Compass 目的为了快3、很快啊,这个安装很快。大概一个小电影的时间配置(1)新建文件目录e:\mongodb\data\db(2) 环境变量设置测试:新开一个cmd窗口,进入MongoDB的bin目录,输入mongo或者mongo.exe访问mongodb默认连接端口27017,如果出现如图的情况,可以打开http://localhost:27017查看出现就说明已经成功了,但是我们是(代)码仔,这么可能取点点。我们要输输输添加服务mongod --dbpath "e:\mongodb\data\db" --logpath "e:\Mongodb\log\mongodb.log" --install --serviceName "MongoDB"启动服务net start MongoDB停止服务net stop MongoDB出现错误,在管理员 cmd执行运行服务,如果错误返回数字 5  重新配置 环境变量。 再到管理员cmd执行命令,当然出现 报错返回 数字 2 直接卸载重装。不要做过分挣扎。重装解决问题是最快的最终运行的效果和结束的服务的结果(我已经忘了点一点的启动服务器的方式)
  • [问题求助] 【鲲鹏ecs产品 centos8.0 】【MongoDB 3.6.13编译】组件适配文档
    鲲鹏ecs产品  centos 8.0【MongoDB 3.6.X编译】组件适配文档
  • [业务动态] 关于《基于MongoDB使用Java实现图书管理系统》微认证正式上线的预通知
    尊敬的微认证客户:您好!为帮助您深入了解华为云产品,探索新的技术场景,我们非常高兴地与您分享一个好消息:由华为资深研发团队精心打磨,潜心研发的新微认证《基于MongoDB使用Java实现图书管理系统》将于2021年8月6日正式上线!届时请进入华为云学院-微认证-软件开发查看产品详情,体验使用,我们非常期待您的宝贵建议。以下为该微认证详情,您可提前了解:产品名称: 《基于MongoDB使用Java实现图书管理系统》适合人群:想了解GaussDB(for Mongo)、DevCloud的开发人员及社会大众培训方案:基于GaussDB(for Mongo)、DevCloud,云上部署图书管理系统技术能力:GaussDB(for Mongo)的购买、连接和使用,DevCloud开发过程认证价值:基于GaussDB(for Mongo)、DevCloud实现应用系统的开发届时我们还将开展相关微认证上新活动,详情请关注华为云学院论坛-热门活动相关通知。发布日期:2021年8月3日
总条数:160 到第
上滑加载中