关于mongodb:MongoDB-Go-Driver-如何记录日志

为什么如果你有这些问题: golang 官网的 mongo driver 怎么执行了没有日志输入啊golang mongo driver 如何记录sql,如何打印之行的命令那么这篇文章能够持续看上来。 背景在这之前我应用 MySQL是比拟多的,起初遇到有记录用户日志需要,随着数据量越来越大,MySQL越来越扛不住,就降级为了Mongo,在应用 Mongo过程中,发现没法记录日志,就是无奈将打印代码发动的sql,之前应用gorm打印execute sql 是很不便的。 在网上查了良久也没查到相干材料,就开始翻官网文档,和源码。 终于在不懈~ 打住,其实很简略,就在 ClientOptions 字段里: // ClientOptions contains options to configure a Client instance. Each option can be set through setter functions. See// documentation for each setter function for an explanation of the option.type ClientOptions struct { AppName *string Auth *Credential AutoEncryptionOptions *AutoEncryptionOptions ... MaxConnecting *uint64 PoolMonitor *event.PoolMonitor Monitor *event.CommandMonitor // 执行的命令监视器(日志) ServerMonitor *event.ServerMonitor ... err error uri string cs *connstring.ConnStringgithub 代码地址 ...

August 20, 2023 · 2 min · jiezi

关于mongodb:mongodb安装和使用mac

mongodb 装置mongodb 数据库的装置有两种办法。 一种是应用命令行装置,第二种是应用HomeBrew 装置,我依照第二种形式装置。 以下都是命令行 更新Homebrew的package数据库: brew update装置 mongodb brew install mongodb查看装置列表 brew listmongodb // (曾经存在)启动mongodb mongod --config /usr/local/etc/mongod.conf连贯mongodb service mongo应用查看所有数据库 show dbsadmin 0.000GBdata_person_info 0.000GBlocal 0.000GBtest 0.000GB创立数据库 use data_person_infoswitched to db data_person_info查看以后数据库 dbdata_person_info增加表数据(文档) > db.data_person_info.insert({'id':'0001','name':'bojue','age':'24'})WriteResult({ "nInserted" : 1 })查看表数据(文档) > db.data_person_info.find(){ "_id" : ObjectId("59f4c3396564b89187361bfd"), "id" : "0001", "name" : "bojue", "age" : "24" }mongodb 卸载brew uninstall mongodbbrew list (曾经不存在 mongodb)

June 21, 2023 · 1 min · jiezi

关于mongodb:MongoDB-索引操作引起的-Crash

摘要:本文具体论述了依据引起 Crash 操作进行从配置到源码的剖析过程,层层递进,定位复现并给出解决故障计划。 作者:徐耀荣 爱可生南区交付服务部 DBA 团队成员,次要负责 MySQL 故障解决以及相干技术支持。喜好电影,游览。 本文起源:原创投稿 爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。故障景象近日,敌人遇到一个 MongoDB 实例 Crash 的问题,找到我帮忙一起剖析起因,事件通过以及剖析过程如下,可供学习。 操作过程运维人员在优化慢查问时针对性创立了一个索引,语句如下: db.c1.createIndex('name':1,background:true)随后又将表上一个没能用上的索引删除,语句如下: db.c1.dropIndex('idx_age')在主节点上很顺利的就实现了,然而不久后就发现从节点产生了 Crash,日志中蕴含下列解体信息。 2023-04-13T07:00:50.752+0000 E STORAGE [conn3569849] WiredTiger error (-31802) [1681369250:752455][9937:0x7fe740144700], WT_CONNECTION.open_session: __open_session, 2058: out of sessions, configured for 20030 (including internal sessions): WT_ERROR: non-specific WiredTiger error Raw: [1681369250:752455][9937:0x7fe740144700], WT_CONNECTION.open_session: __open_session, 2058: out of sessions, configured for 20030 (including internal sessions): WT_ERROR: non-specific WiredTiger error2023-04-13T07:00:50.752+0000 I NETWORK [listener] connection accepted from xxx.xxx.xxx.xxx #3570023 (20576 connections now open)2023-04-13T07:00:50.753+0000 F - [conn3569849] Invariant failure: conn->open_session(conn, NULL, "isolation=snapshot", &_session) resulted in status UnknownError: -31802: WT_ERROR: non-specific WiredTiger error at src/mongo/db/storage/wiredtiger/wiredtiger_session_cache.cpp 111其它信息变更表是一张几千万的大表;数据库架构为 MongoDB 4.0.14 的 PSA 架构;利用开启了读写拆散,从节点也存在大量只读申请。问题剖析依据日志信息,初步狐疑是连贯打满了,查看最大连接数配置。 ...

June 14, 2023 · 3 min · jiezi

关于mongodb:硬卷完了MongoDB-打怪升级进阶成神之路-2023-最新版

后面咱们学习:MySQL 打怪降级进阶成神之路、Redis 打怪降级进阶成神之路,而后咱们还在持续 NoSQL 的卷王之路。从第一篇文章开始,咱们逐渐具体介绍了 MogoDB 根底概念、装置和最根本的CURD操作、索引和聚合、工具/Java API/Springbot集成、罕用治理命令与认证、WT存储引擎技术、复制集、集群部署与保护、分片技术、数据备份与复原、状态检测与性能追踪、客户端和日志剖析工具、查问聚合优化、设计开发标准等常识。 Nosql 数据库介绍是一种非关系型数据库服务,它能解决惯例数据库的并发能力,比方传统的数据库的IO与性能的瓶颈,同样它是关系型数据库的一个补充,有着比拟好的高效率与高性能。专一于key-value查问的redis、memcached、ttserver。 解决以下问题: 对数据库的高并发读写需要大数据的高效存储和拜访需要高可扩展性和高可用性的需要MongoDB 根底概念什么是MongoDBMongoDB 是面向文档的 NoSQL 数据库,用于大量数据存储。MongoDB 是一个在 2000 年代中期问世的数据库。属于 NoSQL 数据库的类别。 MongoDB性能每个数据库都蕴含汇合,而汇合又蕴含文档。每个文档能够具备不同数量的字段。每个文档的大小和内容能够互不雷同。文档构造更合乎开发人员如何应用各自的编程语言结构其类和对象。开发人员常常会说他们的类不是行和列,而是具备键值对的清晰构造。从 NoSQL 数据库的简介中能够看出,行(或在MongoDB 中调用的文档)不须要事后定义架构。相同,能够动态创建字段。MongoDB 中可用的数据模型使咱们能够更轻松地示意层次结构关系,存储数组和其余更简单的构造。可伸缩性– MongoDB 环境具备很高的可伸缩性。寰球各地的公司曾经定义了本人的集群,其中一些集群运行着100多个节点,数据库中蕴含大概数百万个文档。 为什么应用MongoDB以下是一些为什么应该开始应用MongoDB的起因 面向文档的–因为MongoDB是NoSQL类型的数据库,它不是以关系类型的格局存储数据,而是将数据存储在文档中。这使得MongoDB非常灵活,能够适应理论的业务环境和需要。长期查问-MongoDB反对按字段,范畴查问和正则表达式搜寻。能够查问返回文档中的特定字段。索引-能够创立索引以进步MongoDB中的搜寻性能。MongoDB文档中的任何字段都能够建设索引。复制-MongoDB能够提供正本集的高可用性。正本集由两个或多个mongo数据库实例组成。每个正本集成员能够随时充当主正本或辅助副本的角色。主正本是与客户端交互并执行所有读/写操作的主服务器。辅助副本应用内置复制保护主数据的正本。当主正本产生故障时,正本集将主动切换到辅助副本,而后它将成为主服务器。负载平衡-MongoDB应用分片的概念,通过在多个MongoDB实例之间拆分数据来程度扩大。MongoDB能够在多台服务器上运行,以均衡负载或复制数据,以便在硬件呈现故障时放弃零碎失常运行。所以,无论是运维还是开发、测试,对于 NoSQL 数据库之一的 MongoDB 也是必学常识体系之一。 再卷也得学起来,搞起来!!! 硬卷 NoSQL 数据库系列(一):MongoDB  常识体系与根底概念 硬卷 NoSQL 数据库系列(二):MongoDB 装置与 CURD 基本操作 硬卷 NoSQL 数据库系列(三):MongoDB 索引与聚合 硬卷 NoSQL 数据库系列(四):MongoDB 根本应用(工具、API、Spring 集成) 硬卷 NoSQL 数据库系列(五):MongoDB 罕用治理命令与受权认证 硬卷 NoSQL 数据库系列(六):MongoDB 存储引擎 WiredTiger 技术详解 硬卷 NoSQL 数据库系列(七):MongoDB 复制集技术原理详解 ...

May 26, 2023 · 1 min · jiezi

关于mongodb:如何正确地使用-Docker-在云服务器上部署-MongoDB-v6-数据库并连接

本文假如您曾经在云服务器中胜利装置了 Docker 并下载了 mongo 镜像。1. 创立配置文件应用 Docker 部署 MongoDB 时,容器默认不会主动生成 mongod.conf 配置文件,须要开发者手动映射云服务器上的配置文件至容器外部,因而,咱们须要先创立一份配置文件,您能够任意抉择该文件的存储目录,这里咱们假如存储门路为 /mongo/mongod.conf。 配置文件内容如下: # 数据库存储门路dbpath=/var/lib/mongodb# 日志文件门路logpath=/var/log/mongodb/mongod.log# 监听的端口port=27017# 容许所有的 IP 地址连贯bind_ip=0.0.0.0# 启用日志记录journal=true# 启用身份验证auth=true 留神 bind_ip 的设定十分重要,它使得咱们可能近程连贯数据库!2. 创立 MongoDB 容器应用如下 Docker 命令部署 MongoDB 容器: docker run --name <your db name> \ -p <hostport>:27017 \ -v <config file address>:/etc/mongod.conf \ -v <dbpath>:/var/lib/mongodb \ -v <logpath>:/var/log/mongodb/mongod.log \ -d \ mongo \ --auth请依照您的理论状况替换 <> 内的内容,在这条命令中,从上至下咱们制订了: 容器名;云服务器与容器外部的端口映射;配置文件映射;数据存储门路映射;日志门路映射;长久化后盾运行;镜像名称;须要身份验证;3. 创立身份信息您须要应用 docker exec -it <your db name> mongosh 进入 MongoDB 数据库。 ...

April 15, 2023 · 1 min · jiezi

关于mongodb:mongoShake基于go实践应用

MongoShake——基于MongoDB的跨数据中心的数据复制平台-阿里云开发者社区 通过阿里云自研的MongoShake开源工具,您能够实现MongoDB数据库间的数据同步,该性能可用于数据分析、灾备和多活等业务场景。本文以云数据库MongoDB实例间的数据实时同步为例介绍配置流程。 1. 下载git clone https://github.com/alibaba/MongoShake 2. 介绍MongoShake是阿里云以Golang语言编写的通用平台型服务工具,它通过读取MongoDB的Oplog操作日志来复制MongoDB的数据以实现特定需要。 MongoShake还提供了日志数据的订阅和生产性能,可通过SDK、Kafka、MetaQ等形式的灵便对接,实用于日志订阅、数据中心同步、Cache异步淘汰等场景 3. 利用场景MongoDB集群间数据的异步复制,免去业务双写开销。MongoDB集群间数据的镜像备份(以后1.0开源版本反对受限)日志离线剖析日志订阅数据路由。依据业务需要,联合日志订阅和过滤机制,能够获取关注的数据,达到数据路由的性能。Cache同步。日志剖析的后果,晓得哪些Cache能够被淘汰,哪些Cache能够进行预加载,反向推动Cache的更新。基于日志的集群监控4. 性能MongoShake从源库抓取oplog数据,而后发送到各个不同的tunnel通道。源库反对:ReplicaSet,Sharding,Mongod,目标库反对:Mongos,Mongod。现有通道类型有: Direct:间接写入目标MongoDBRPC:通过net/rpc形式连贯TCP:通过tcp形式连贯File:通过文件形式对接Kafka:通过Kafka形式对接Mock:用于测试,不写入tunnel,摈弃所有数据消费者能够通过对接tunnel通道获取关注的数据,例如对接Direct通道间接写入目标MongoDB,或者对接RPC进行同步数据传输等。此外,用户还能够本人创立本人的API进行灵便接入。上面2张图给出了根本的架构和数据流。 5. 配置与应用首先返回https://github.com/alibaba/MongoShake下载mongoshake,如下两种形式都能够 go get github.com/alibaba/MongoShakegit clone https://github.com/alibaba/MongoShake在我的项目目录中次要关注如下两个目录 github.com/mongoShake/cmd ├── collector │ ├── collector.go │ └── sanitize.go └── receiver └── receiver.go其中collector就是启动mongoShake监听mongodb的入口,而receiver则是用于接管collector监听mongo中的oplogs日志变动的数据处理程序实践上须要依据语言的不同而需进行独立开发,因为mongoShake整体的实现采纳的是go故此receiver自身也是基于go实现的。 如下为配置文件目录地址 github.com/mongoShake/conf ├── collector.conf └── receiver.conf其中与启动mongoShake实现监听的次要配置是collector.conf,如下是我抉择整个配置中较为罕用的几项配置信息 # 源MongoDB连贯串信息,逗号分隔同一个正本集内的结点,分号分隔分片sharding实例,免密模式mongo_urls = mongodb://192.168.145.10:27017# tunnel pipeline type. now we support rpc,file,kafka,mock,direct# 通道模式。tunnel = rpc# tunnel.address = mongodb://127.0.0.1:20080tunnel.address = 127.0.0.1:1234# raw是默认的类型,其采纳聚合的模式进行写入和# 读取,然而因为携带了一些管制信息,所以须要专门用receiver进行解析。# json以json的格局写入kafka,便于用户间接读取。# bson以bson二进制的格局写入kafka。tunnel.message = raw# 黑白名单过滤,目前不反对正则,白名单示意通过的namespace,黑名单示意过滤的namespace,# 不能同时指定。分号宰割不同namespace,每个namespace能够是db,也能够是db.collection。filter.namespace.black =filter.namespace.white =# checkpoint的具体写入的MongoDB地址,如果不配置,对于正本集和分片集群都将写入源库(db=mongoshake)# 2.4版本当前不须要配置为源端cs的地址。checkpoint.storage.url = mongodb://127.0.0.1:27017其余的配置信息比拟多能够看官网文档也能够看配置正文(是中文的),第一次应用只须要关注如下三个配置信息即可。案例采纳rpc为示例。 ...

March 30, 2023 · 4 min · jiezi

关于mongodb:技术分享-PBM备份恢复

作者:张洪 爱可生南区 DBA 团队成员,次要负责mysql故障解决及相干技术支持。喜好游览,摄影。 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 概述Percona Backup for MongoDB(PBM)是一个针对MongoDB正本集和分片的一致性备份开源工具,它反对逻辑备份、物理备份、增量备份以及选择性备份和复原等个性,并且反对Point-in-Time复原到指定工夫点。 但十分惋惜的是物理备份相干性能目前仅实用于Percona Server for MongoDB的分支,因而上面次要围绕逻辑备份与Point-in-Time来开展,MongoDB Community版本要求4.0及以上。 架构 pbm-agent pbm-agent用于执行备份、复原,删除和其它操作的过程,它必须运行在集群的每个mongod实例上。包含正本集中的secondary节点以及分片集群中的config正本集。 所有pbm-agent都会监督PBM Control汇合的更新,当PBM CLI对PBM Control汇合产生更新时,将会在每个正本集上抉择一个secondary上的pbm-agent执行操作,如果没有响应则会抉择Primary上的pbm-agent执行操作。 被选中的pbm-agent将会加锁,防止同时触发备份和复原等互斥操作。操作实现后将会开释锁,并更新PBM Control汇合 PBM CLI PBM CLI是一个操作PBM的命令行工具,它应用PBM Control汇合与pbm-agent过程通信。通过更新和读取操作、日志等相应的PBM Control汇合来启动和监督备份和复原操作。同时,它也将PBM配置信息保留在PBM Control汇合中。 PBM Control collections PBM Control collections是存储配置数据和备份状态的非凡汇合,分片环境寄存在config正本集的admin数据库中,正本集则保留在本身的admin数据库中。 次要蕴含以下汇合: admin.pbmBackups:备份的日志和状态admin.pbmAgents:pbm-agent的运行状态admin.pbmConfig:PBM的配置信息admin.pbmCmd:用于定义和触发操作admin.pbmLock:pbm-agent同步锁admin.pbmLockOp:用于协调不互斥的操作,如执行备份、删除备份等admin.pbmLog:存储pbm-agent的日志信息admin.pbmOpLog:存储操作IDadmin.pbmPITRChunks:存储point-in-time复原的oplog块admin.pbmPITRState:存储point-in-time复原增量备份的状态admin.pbmRestores:存储还原历史记录和状态admin.pbmStatus:记录PBM备份状态remote backup storge近程备份存储是保留备份文件的地位,能够是S3存储,也能够是Filesystem。通过pbm list命令能够查看备份集。备份文件名称都是以UTC备份开始工夫作为前缀,每个备份都有一个元数据文件。对于备份中的每个正本集: 有一个mongodump格局的压缩归档文件,它是汇合的转储笼罩备份工夫的oplog的BSON文件转储装置配置下载PBM # wget https://downloads.percona.com/downloads/percona-backup-mongodb/percona-backup-mongodb-2.0.3/binary/tarball/percona-backup-mongodb-2.0.3-x86_64.tar.gz解压PBM # tar -xvf percona-backup-mongodb-2.0.3-x86_64.tar.gz配置环境变量 # echo "export PATH=$PATH:/usr/local/percona-backup-mongodb-2.0.3-x86_64" >> /etc/profile# source /etc/profile在正本集上创立PBM用户,如果是分片环境,则每个shard以及config都须要创立 # create pbm roleshard1:PRIMARY> db.getSiblingDB("admin").createRole({ "role": "pbmAnyAction", "privileges": [ { "resource": { "anyResource": true }, "actions": [ "anyAction" ] } ], "roles": [] });# create pbm usershard1:PRIMARY> db.getSiblingDB("admin").createUser({user: "pbmuser", "pwd": "secretpwd", "roles" : [ { "db" : "admin", "role" : "readWrite", "collection": "" }, { "db" : "admin", "role" : "backup" }, { "db" : "admin", "role" : "clusterMonitor" }, { "db" : "admin", "role" : "restore" }, { "db" : "admin", "role" : "pbmAnyAction" } ] });配置remote backup storge,除mongos外,每个节点都须要存在对应的备份目录 ...

March 23, 2023 · 2 min · jiezi

关于mongodb:mongodb集群副本集

linux配置mongodb集群正本集Mongodb(M)示意主节点,Mongodb(S)示意备节点,Mongodb(A)示意仲裁节点。 Primary:主节点,一个正本集有且仅有一台服务器处于Primary状态,只有主节点才对外提供读写服务。如果主节点挂掉,正本集将投票选出一个备节点成为新的主节点。 Secondary:备用节点,正本集容许有多台Secondary,每个备用节点的数据与主节点的数据是齐全同步的。Recovering 复原中,当正本集中某台服务器挂掉或者掉线后数据无奈同步,从新复原服务后从其余成员复制数据,这时就处于复原过程,数据同步后,该节点又回到备用状态。 Arbiter:仲裁节点,该类节点能够不必独自存在,如果配置为仲裁节点,就次要负责在复本集中监控其余节点状态,投票选出主节点。该节点将不会用于存放数据。如果没有仲裁节点,那么投票工作将由所有节点独特进行。 mongodb官网下载https://www.mongodb.com/try/download/community1、软件上传解压tar zxvf mongodb-linux-x86_64-amazon2-6.0.4.tgz2、创立对应目录创立文件夹mkdir -pv /root/mongodb/{master,slave,arbiter}mkdir: 已创立目录 "/root/mongodb"mkdir: 已创立目录 "/root/mongodb/master"mkdir: 已创立目录 "/root/mongodb/slave"mkdir: 已创立目录 "/root/mongodb/arbiter"创立master文件夹中的data、log、confmkdir -pv /root/mongodb/master/{data,log,conf}mkdir: 已创立目录 "/root/mongodb/master/data"mkdir: 已创立目录 "/root/mongodb/master/log"mkdir: 已创立目录 "/root/mongodb/master/conf"创立slave文件夹中的data、log、confmkdir -pv /root/mongodb/slave/{data,log,conf}mkdir: 已创立目录 "/root/mongodb/slave/data"mkdir: 已创立目录 "/root/mongodb/slave/log"mkdir: 已创立目录 "/root/mongodb/slave/conf"创立slave文件夹中的data、log、confmkdir -pv /root/mongodb/arbiter/{data,log,conf}mkdir: 已创立目录 "/root/mongodb/arbiter/data"mkdir: 已创立目录 "/root/mongodb/arbiter/log"mkdir: 已创立目录 "/root/mongodb/arbiter/conf"3、复制软件到绝对应地位cd mongodb-linux-x86_64-amazon2-6.0.1/cp -ra ./* /root/mongodb/master/cp -ra ./* /root/mongodb/slave/cp -ra ./* /root/mongodb/arbiter/4、创立master配置文件编辑conf设置:vi master/conf/mongodb.conf dbpath=/root/mongodb/master/datalogpath=/root/mongodb/master/log/mongodb.logpidfilepath=/root/mongodb/master/master.piddirectoryperdb=truelogappend=truereplSet=testrsbind_ip=0.0.0.0port=27017oplogSize=10000fork=true5、创立slave配置文件编辑conf设置:vi slave/conf/mongodb.conf dbpath=/root/mongodb/slave/datalogpath=/root/mongodb/slave/log/mongodb.logpidfilepath=/root/mongodb/slave/slave.piddirectoryperdb=truelogappend=truereplSet=testrsbind_ip=0.0.0.0port=27018oplogSize=10000fork=true6、创立arbiter配置文件编辑conf设置:vi arbiter/conf/mongodb.conf dbpath=/root/mongodb/arbiter/datalogpath=/root/mongodb/arbiter/log/mongodb.logpidfilepath=/root/mongodb/arbiter/arbiter.piddirectoryperdb=truelogappend=truereplSet=testrsbind_ip=0.0.0.0port=27019oplogSize=10000fork=true7、配置文件参数解释dbpath:数据寄存目录logpath:日志寄存门路pidfilepath:过程文件,不便进行mongodbdirectoryperdb:为每一个数据库依照数据库名建设文件夹寄存logappend:以追加的形式记录日志replSet:replica set的名字bind_ip:mongodb所绑定的ip地址port:mongodb过程所应用的端口号,默认为27017oplogSize:mongodb操作日志文件的最大大小。单位为Mb,默认为硬盘残余空间的5%fork:当前台形式运行过程noprealloc:不事后调配存储# usercenter replset masterbind_ip=#指定服务器监听的端口,默认是27017port=30010#集群名字replSet=test_set#以守护过程的形式运行MongoDBfork=true#一个数据库一个文件夹directoryperdb=true##启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里journal = true# 在收到客户数据,查看的有效性objcheck=true#操作日志大小限度2GoplogSize=2000#pidfilepidfilepath=/data/mongo_set/test_set/30010/mongo_m30010.pid#指定数据目录,默认是/data/db/。每个mongod过程都须要独立的目录,#启动mongod时就会在数据目录中创立mongod.lock文件,避免其余mongod过程应用该数据目录。dbpath=/data/mongo_set/test_set/30010#指定日志输入门路,如果不指定则会在终端输入。每次启动都会笼罩原来的日志,如果不想笼罩就要用--logappend选项logpath=/data/mongo_set/test_set/30010/mongo30010.loglogappend=true#auth=true#0:敞开,不收集任何数据。1:收集慢查问数据,默认是100毫秒。2:收集所有数据profile=2slowms=100#.禁止HTTP状态接口nohttpinterface=true#.禁止REST接口-在生产环境下倡议不要启用MongoDB的REST接口rest=false8、启动mongodb# 启动主节点/master/bin/mongod -f master/conf/mongodb.conf # 启动从节点./slave/bin/mongod -f slave/conf/mongodb.conf# 启动仲裁节点./arbiter/bin/mongod -f arbiter/conf/mongodb.conf9、查看启动过程ps -ef | grep mongodbps aux | grep -v grep | grep mongod10、装置shell工具因为高版本的mongodb去掉了自带的shell工具https://www.mongodb.com/try/download/shelltar -zxvf mongosh-1.6.2-linux-x64.tgz#挪动文件mv mongosh-1.6.2-linux-x64 /usr/local/mongosh#无明码连贯/usr/local/mongosh/bin/mongosh 127.0.0.1:27017 #应用账号密码登录 /usr/local/mongosh/bin/mongosh -u root -p 12345611、配置正本集use adminreset={_id:"testrs", members:[ {_id:0,host:'127.0.0.1:27011',priority:2}, {_id:1,host:'127.0.0.1:27012',priority:1}, {_id:2,host:'127.0.0.1:27013',arbiterOnly:true}]};rs.initiate(reset) # 使配置失效rs.status()最外层的_id示意replica set的名字,members里蕴含的是所有节点的地址以及优先级。优先级最高的即成为主节点,即这里的'127.0.0.1:27017'。特地留神的是,对于仲裁节点,须要有个特地的配置——arbiterOnly:true。这个千万不能少了,不然主备模式就不能失效。 ...

March 21, 2023 · 1 min · jiezi

关于mongodb:bug-solved-zsh-command-not-found-mongo-Mac-M1M2

背景:新电脑装置的是MongoDB 6.0.4 形容:这个照stackoverflow上的高赞和谷歌搜寻的第一面给出的所有解决办法都不能解决,难顶,所以写了这篇,供起初人参考。 退回MongoDB 5 解决了,,,起初发现把5安装包的/usr/local/mongodb/bin目录下的mongo文件复制到6中同样也能解决。所以最终办法是:把5安装包的/usr/local/mongodb/bin目录下的mongo文件复制到6中 如果是老手的话 能够依照以下具体步骤操作: mac关上terminal 把下载下来的文件解压后放到/usr/local下 (记得把mongodb-macos-xx-x.x.x重命名为mongodb)open .bash_profile 最初一行增加 export PATH=${PATH}:/usr/local/mongodb/bin/open .zshrc 最初一行增加source ~/.bash_profile在terminal中执行source .zshrc 而后在terminal中输出mongod -version 应该能进去版本信息,否则后面几步有问题 回去改。在terminal中 cd /usr/local/mongodb 输出mkdir data log 创立这两个存放数据和log的文件夹在terminal输出 sudo chown 你电脑的用户名 /usr/local/mongodb/datasudo chown 你电脑的用户名 /usr/local/mongodb/log而后在terminal输出 mongod --fork --dbpath data --logpath log/mongo.log --logappend新开一个新的terminal 输出mongo呈现 ================Welcome to the MongoDB shell.For interactive help, type "help".Happy hacking~

February 26, 2023 · 1 min · jiezi

关于mongodb:如何使用码匠连接-MongoDB

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中性能最丰盛,最像关系数据库的。它反对的数据结构十分涣散,是相似 JSON 的 BSON 格局,因而能够存储比较复杂的数据类型。MongoDB 最大的特点是它反对的查询语言十分弱小,其语法有点相似于面向对象的查询语言,简直能够实现相似关系数据库单表查问的绝大部分性能,而且还反对对数据建设索引。 目前码匠曾经实现了与 MongoDB 数据源的连贯,反对创立查问对数据进行增、删、改、查,还反对将数据绑定至各种组件,并通过简略的代码实现数据的可视化和计算等操作,能让您疾速、高效地搭建利用和外部零碎。 在码匠中集成 MongoDB步骤一:新建数据源连贯,抉择 MongoDB 数据源,并依据提醒填写相应配置。这里码匠反对 URL 连贯和惯例连贯两种形式。 步骤二:新建 MongoDB 查问。 步骤三:书写/抉择查询方法并展现/应用查问后果。 在码匠中应用 MongoDB操作数据:在码匠中能够对 MongoDB 数据进行增、删、改、查的操作应用数据:用户能够在左侧的查问面板内查看数据结构,并通过{{yourQueryName.data}}来援用查问后果对于码匠码匠是面向开发者的低代码平台,在帮忙企业实现个性化零碎搭建的同时,还可能省去前端开发,可极大进步开发实效,为企业实现降本增效。 码匠次要性能: 开箱即用,50+ 弱小好用的前端组件,反对 JS 以实现灵便的交互逻辑;连贯所有数据源:REST API、MySQL、MongoDB、Microsoft SQL server、Redis、Oracle 等 20 种以上;欠缺的用户接入计划:反对飞书、企微、钉钉接入。反对 SSO、OAuth2.0、CAS;灵便的自定义性能:自定义款式、自定义 CSS、自定义插件 & npm 插件 ;扩展性强:Javascript 三方库;反对私有化部署;反对权限治理,反对组织架构主动同步。1000家企业都在用码匠实现疾速开发,快来体验吧! 仍有疑难:https://majiang.co/docs/database/mongodb立刻试用:https://majiang.co/

February 23, 2023 · 1 min · jiezi

关于mongodb:MongoDB-error-code-96-的解决办法或者说排序时内存使用超过32MB的问题的解决办法

景象:返回json报错: { code: 96 , codeName: "OperationFailed" , name: "MongoError"}起因:mongodb用于排序的内存下限为32M,当一次排序的数据集超过32M的时候就会报这个错。 解决办法: 1、db.adminCommand({setParameter: 1,internalQueryExecMaxBlockingSortBytes: xxxx}),xxxx的取值为本人想要的内存下限,比方,256M=256*1024*1024=268435456。此命令即时失效,不过,要留神的是,当MongoDB重启时,如果配置文件中未显示设置,则会复原默认的32M。 2、批改/etc/mongod.conf,增加如下内容,确保重启之后不会复原到默认值:setParameter: internalQueryExecMaxBlockingSortBytes: 268435456 参考链接:https://blog.sina.com.cn/s/bl...

February 13, 2023 · 1 min · jiezi

关于mongodb:重启-mongodb

如果前期运培修改mongodb.conf配置文件后,重新启动mongodb查找mongodb过程可用指令netstat -ntlp间接干掉kill -9 10756而后重启$ ./mongod -f /usr/local/mongodb/conf/mongodb.conf //启动$ ./mongomongodb重启后,我的项目的mongodb过程被中断,须要重启服务器但凡用到mongodb数据库的我的项目参考链接:原文链接:https://segmentfault.com/a/11... 参考文章:https://blog.csdn.net/lafsca5...

February 13, 2023 · 1 min · jiezi

关于mongodb:Mongodb搭建

1、下载网址:https://www.mongodb.com/try/d... 2、解压 tar -zxvf mongodb-linux-x86_64-amazon2-6.0.4.tgz3、寄存、配置 cd mongodb #进入文件夹mkdir datamkdir logs# 改名mv mongodb-linux-x86_64-amazon2-6.0.4.tgz mongodb配置 vim /etc/profile# mongodb配置export MONGODB_HOME=/usr/local/mongodbexport PATH=$MONGODB_HOME/bin:$PATH# 刷新source ~/.bash_profile4、增加 MongoDB 配置文件 vim /etc/mongodb.conf#指定数据库门路dbpath=/usr/local/mongodb/data#指定MongoDB日志文件logpath=/usr/local/mongodb/logs/mongodb.log# 应用追加的形式写日志logappend=true#端口号port=27017 #不便外网拜访,外网所有ip都能够拜访,不要写成固定的linux的ipbind_ip=0.0.0.0fork=true # 以守护过程的形式运行MongoDB,创立服务器过程#auth=true #启用用户验证#bind_ip=0.0.0.0 #绑定服务IP,若绑定127.0.0.1,则只能本机拜访,不指定则默认本地所有IP5、启动、敞开mongodb #启动 MongoDB(-conf 应用配置文件形式启动)mongod -f /etc/mongodb.conf#敞开 MongoDB(-conf 应用配置文件形式敞开 )mongod --shutdown -f /etc/mongodb.conf#查看过程ps -ef | grep mongod6、装置shell工具因为高版本的mongodb去掉了自带的shell工具https://www.mongodb.com/try/d... tar -zxvf mongosh-1.6.2-linux-x64.tgz#挪动文件mv mongosh-1.6.2-linux-x64 /usr/local/mongosh#无明码连贯/usr/local/mongosh/bin/mongosh #应用账号密码登录 /usr/local/mongosh/bin/mongosh -u root -p 1234567、创立用户 use admin; db.createUser({user: 'root', pwd: '123456', roles: [{role: 'root', db: 'admin'}]}); db.createUser({user: 'admin', pwd: '123456', roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]});Read:容许用户读取指定数据库readWrite:容许用户读写指定数据库dbAdmin:容许用户在指定数据库中执行治理函数,如索引创立、删除,查看统计或拜访system.profileuserAdmin:容许用户向system.users汇合写入,能够找指定数据库里创立、删除和治理用户clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相干函数的管理权限。readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。root:只在admin数据库中可用。超级账号,超级权限。8、简略指令的应用 ...

February 10, 2023 · 2 min · jiezi

关于mongodb:Linux-Centos-7安装MongoDB

配置yum源创立并编辑文件/etc/yum.repos.d/mongodb-org-4.2.repo,填入以下内容: [mongodb-org-4.2]name=MongoDB Repositorybaseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/gpgcheck=1enabled=1gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc字段阐明: name # 名称baseurl # 取得下载的门路gpkcheck=1 # 示意对从这个源下载的rpm包进行校验;enable=1 # 示意启用这个源。gpgkey # gpg验证应用yum装置MongoDByum install -y mongodb-org验证装置后果rpm -qa |grep mongodbrpm -ql mongodb-org-server 启动MongoDBservice mongod start 或者 systemctl start mongod.service // 启动service mongod restart // 重启service mongod stop // 敞开sudo yum erase $(rpm -qa | grep mongodb-org) # 卸载MongoDBsudo rm -r /var/log/mongodb # 删除日志文件sudo rm -r /var/lib/mongo # 删除数据文件批改配置文件mongodb.confvi /etc/mongod.conf# network interfacesnet: port: 27017 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.重启 ...

January 16, 2023 · 1 min · jiezi

关于mongodb:MongoDB60的安装2023年

你好,我是悦创。 优质原文格局:https://bornforthis.cn/column/crawler/supplement/mongodb-install.html 点进去有惊喜。 吐槽,这篇博客的产生是因为自己被 MongoDB 的装置坑了几次,为防止各位朋友在同一个中央踩坑,上面我会具体的解说阐明我的装置步骤。自己的电脑是 Window10 零碎,如果零碎和我雷同保障你装置胜利。 阐明:我用的是 brew 进行装置,且输出: mongosh失常响应。如果你应用其余办法,且胜利了,记得留言,这样能够为后来者铺路。有问题也能够留言探讨! MongoDB 当初曾经出到了 6.x 版本,很多的装置教程是基于 4.x、3.x 版本,可能曾经过期。 接下来,我将分享最新的装置教程。 MongoDB 是由 C++ 语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储模式相似 JSON 对象,它的字段值能够蕴含其余文档、数组及文档数组,非常灵活。 MongoDB 反对多种平台,包含 Windows、Linux、Mac OS、Solaris 等,在其官方网站(https://www.mongodb.com/try/download/community)均可找到对应的安装包。 MongoDB 装置蕴含两局部:一个是 MongoDB 装置。一个是可视化软件装置(Studio 3T)。如果你应用命令行操作 MongoDB,能够不装置 Studio 3T,然而自己倡议你装置 Studio 3T,因为不须要在命令行输出繁琐的命令,间接在 Studio 3T 上操作即可,用起来很不便。 本节中,咱们来看下它的装置过程。 1. 相干链接官方网站:https://www.mongodb.com官网文档:https://www.mongodb.com/docs/GitHub:https://github.com/mongodb中文教程:https://www.runoob.com/mongodb/mongodb-tutorial.html2. Windows 下的装置这里间接在官网(如图 1 所示)点击 DOWNLOAD 按钮下载 msi 安装包即可。 下载 .msi 文件,下载后双击该文件,按操作提醒装置即可。 下载实现后,双击它开始装置,指定 MongoDB 的装置门路,例如此处我指定的装置门路为 C:\Program Files\MongoDB\Server\6.0\。当然,这里也能够自行抉择门路。 ...

January 4, 2023 · 4 min · jiezi

关于mongodb:mongo-分片集群

之前说到了主从集群,对于主从集群的搭建以及细节前面会再次分享,这次咱们先初步来看看 分片集群 举个例子例如咱们有几百G甚至更多的数据,可是咱们只有单个正本集,数据量这么大,网络 IO ,CPU ,内存占用 耗费都会十分的大,一个集群可能吃不消 那么咱们能够分片 , 分片也就是分而治之 分片分片,分为 垂直散布能够进步集群节点的性能,然而这个形式是有瓶颈的,例如咱们一台服务器,内存占用较高,咱们能够通过减少服务器的内存在解决 程度散布例如咱们的服务器,内存占用较高,咱们能够减少服务器的数量,减少集群的数量,这样服务器一多,保护老本也就线性减少,性能也是线性晋升的 理论状况下,如果咱们的数据增长十分大,那么必定会有冷热数据的辨别,对于冷数据,咱们能够将数据放到差一些的服务器,很少会用到查问操作或者写操作,对于热点高频数据,咱们就能够放到高性能的服务器下面,且要做好扩大 为什么要用分片集群?咱们为什么要应用分片集群呢?还是因为数据量太大,须要咱们分成一小块一小块的别离来解决,这样才得以解决数据量大的问题 分片集群就是 Mongdb 在多台计算机之间调配数据的集群部署形式 通过下面的例子咱们能够晓得,就是能够将大型的数据,进行辨别成绝对更小并且易于治理的小片,将这些数据片分给不同的 mongodb 节点,这些节点,就组成了分片集群 对于分片集群,咱们须要相熟一下如下角色: Router 路由器: 路由器,这里是 mongos 服务,当做是一个路由器,在客户端程序须要分片的时候能够提供接口 Shard 分片: 每个 Shard 分片蕴含共享数据的子集,每个Shard 分片是能够部署主从集群的,所以,分片集群,其实就是多个主从集群 config server 配置服务: 配置服务存储集群的元数据和具体的配置设置,mongodb 逐渐倒退,必须要将配置服务部署为正本集了,这个是 mongodb 3.4 版本开始的 为什么要把 mongos 放到客户端?能够较少网络开销,例如分片在别的网络下面的时候,若客户端想要做路由,mongos 就在本地,那么在本地就能够实现路由,如果 mongos 在服务端,那么就多出互相通信的数据包,减少网络开销如果 config server 的配置产生扭转了,个别的状况下,是须要通过咱们的 mongos 来进行批改的,批改后须要从新加载数据 而不是咱们登陆到某一个 config server 上批改数据,这样会造成数据凌乱,不能这样干 明天临时理解一下根本的知识点,下一次咱们一起来搭建一下 mongodb 的集群,以及部署中可能会遇到的坑 学习所得,若有偏差,还请斧正 欢送点赞,关注,珍藏敌人们,你的反对和激励,是我保持分享,提高质量的能源 好了,本次就到这里 技术是凋谢的,咱们的心态,更应是凋谢的。拥抱变动,背阴而生,致力向前行。 我是阿兵云原生,欢送点赞关注珍藏,下次见~

November 27, 2022 · 1 min · jiezi

关于mongodb:Linux解压安装MongoDB

Linux解压装置MongoDBMacBook解压装置MongoDB MongoDB介绍MongoDB 是收费开源的跨平台 NoSQL 数据库 MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 利用提供可扩大的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中性能最丰盛,最像关系数据库的。 它反对的数据结构十分涣散,是相似json的bson格局,因而能够存储比较复杂的数据类型。Mongo最大的特点是它反对的查询语言十分弱小,其语法有点相似于面向对象的查询语言,简直能够实现相似关系数据库单表查问的绝大部分性能,而且还反对对数据建设索引。 Mongodb部署cd /data/softwarewget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.5.tgztar -zxvf mongodb-linux-x86_64-4.0.5.tgz mv mongodb-linux-x86_64-4.0.5 /data/apps/mongodb-4.0.5mkdir -pv /data/apps/mongodb-4.0.5/datamkdir -pv /data/apps/mongodb-4.0.5/log/mongod.logcd /data/apps/mongodb-4.0.5/nohup ./bin/mongod --dbpath /data/apps/mongodb-4.0.5/data --logpath /data/apps/mongodb-4.0.5/log/mongod.log --logappend --bind_ip_all --fork >> log.file 2>&1 &不加这个配置,退出shell后,过程就会退出--fork

November 23, 2022 · 1 min · jiezi

关于mongodb:mongodb基本操作命令

1、列出数据库 show dbs 2、应用 template 库use template 3、列出数据表show collections 4、查看templates表的数据 db.templates.find().pretty();

October 24, 2022 · 1 min · jiezi

关于mongodb:mongodb-索引实操

当初咱们就开始实操 mongodb 的索引吧 数据筹备向 mydoc 汇合中,插入多条数据,mydoc 之前是没有存在过的,咱们间接应用 db.mydoc.insertMany() ,mongodb 会默认给咱们新建这个汇合 db.mydoc.insertMany([ { item:"canvas", qty:120, size:{ h:28, w:35.5, uom:"cm" }, status:"A", createDate:ISODate("2016-02-06T20:20:13Z") }, { item:"journal", qty:25, tags:[ {tag:"gray", type:"paper"}, {tag:"red", type:"electron"} ], size:{ h:14, w:21, uom:"cm" }, status:"A", createDate:ISODate("2016-02-07T20:20:13Z") }, { item:"notebook", qty:50, tags:[ {tag:"yellow", type:"paper"}, {tag:"green", type:"electron"}], size:{ h:8.5, w:11, uom:"in" }, status:"P", createDate:ISODate("2016-02-08T20:20:13Z")}, { item:"paper", qty:100, tags:[{tag:"yellow", type:"paper"}, {tag:"brown", type:"electron"}], size:{ h:8.5, w:11, uom:"in" }, status:"D", createDate:ISODate("2016-02-09T20:20:13Z") }, { item:"planner", qty:75, tags:[{tag:"yellow", type:"paper"}, {tag:"green", type:"electron"}], size:{ h:22.85, w:30, uom:"cm" }, status:"D", createDate:ISODate("2016-02-10T20:20:13Z") }, { item:"postcard", qty:45, tags:[{tag:"black", type:"paper"}, {tag:"green", type:"electron"}], size:{ h:10, w:15.25, uom:"cm" }, status:"P", createDate:ISODate("2016-02-11T20:20:13Z") }, { item:"sketchbook", qty:80, status:"A", createDate:ISODate("2016-02-12T20:20:13Z") }]);插入胜利 ...

October 22, 2022 · 3 min · jiezi

关于mongodb:mongodb-索引

什么是索引索引是一种用来不便查问数据的 数据结构 B Tree就是一种罕用的数据库索引数据结构,MongoDB采纳 B 树做索引,索引创立在colletions 上。 咱们能够在这个网站上直观的看到索引的成果 https://www.cs.usfca.edu/~gal... 除了 B 树,均衡二叉树、红黑数、B + 树都能够用来做索引 mongodb 应用索引和不应用索引MongoDB不应用索引的查问的时候,会先扫描所有的文档,再匹配符合条件的文档。应用索引的查问,会通过索引找到文档,应用索引可能极大的晋升查问效率mongodb 中的索引mongodb 中的索引与多种索引类型,梳理一下看看成果 索引类型形容demo单字段索引在某一个特定的字段上建设索引mongoDB 在 ID 上建设了惟一的单键索引,所以常常会应用 id 来进行查问;在索引字段上进行准确匹配、排序以及范畴查找都会应用此索引;创立一个倒序的索引db.users. createIndex({age:-1});复合索引在多个特定的属性上建设索引<br/>复合索引键的排序程序,能够确定该索引是否能够反对排序操作;<br/>在索引字段上进行准确匹配、排序以及范畴查找都会应用此索引,但与索引的程序<br/>无关;<br/>为了性能思考,应删除存在与第一个键雷同的单键索引db.users. createIndex({username:1,age:-1,country:1})多键索引在数组的属性上建设索引<br/>针对这个数组的任意值的查问都会定位到这个文档,既多个索引入口或者键值援用<br/>同一个文档db.users.createIndex({favorites.city:1})空间索引2 种平面几何的 2d 索引,球面几何的2dsphere索引 见后文详解<br/>文本索引 反对在汇合中搜寻字符串内容db.reviews.createIndex( { comments: "text" } )Hash索引不同于传统的B-树索引,哈希索引应用hash函数来创立索引<br/>在索引字段上进行准确匹配,但不反对范畴查问,不反对多键hash;<br/>Hash索引上的入口是均匀分布的,在分片汇合中十分有用db.users.createIndex({username : 'hashed'})如何应用索引MongoDB 应用 createIndex() 办法来创立索引,createIndex() 办法根本语法格局是这样的 db.汇合名.createIndex(keys, options)key 文档类型值为要创立的索引字段,1为指定按升序创立索引,-按降序来创立索引指定为-1。 options文档类型值 MongoDB 中提供了丰盛的属性,比方 background,是否后盾构建索引, 数据量太大时构建索引耗费工夫长,为了不影响业务,能够加上此参数 后盾运行同时还会为其余读写操作让路 name自定义索引名字 mongodb 的索引属性惟一索引 可确保索引字段不会存储反复值 MongoDB默认在创立汇合时会在_id字段上创立惟一索引,例如 db.collection.createIndex( {id:1}, {unique:true}) 局部索引 仅索引汇合中合乎指定过滤器表达式的文档 较低的存储需要,索引创立和保护的老本变小,例如 db.restaurants.createIndex( { cuisine: 1, name: 1 }, { partialFilterExpression:{ rating:{ $gt: 5 } } }) 稠密索引 ...

October 17, 2022 · 2 min · jiezi

关于mongodb:Go-操作mongodb

增加mongodb驱动程序用于go get将 Go 驱动程序增加为依赖项。 go get go.mongodb.org/mongo-driver/mongo应用办法创立main.go 文件 package mainimport ( "context" "fmt" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" "log" "time")// MongoDB 连接池var MongoDBClient *mongo.Database// pool 连接池模式func ConnectToDBPool() { user := "admin" password := "12345678" host := "127.0.0.1" port := "27017" dbName := "demo" timeOut := 2 maxNum := 50 uri := fmt.Sprintf("mongodb://%s:%[email protected]%s:%s/%s?w=majority", user, password, host, port, dbName) // 设置连贯超时工夫 ctx, cancel := context.WithTimeout(context.Background(), time.Duration(timeOut)) defer cancel() // 通过传进来的uri连贯相干的配置 o := options.Client().ApplyURI(uri) // 设置最大连接数 - 默认是100 ,不设置就是最大 max 64 o.SetMaxPoolSize(uint64(maxNum)) // 发动链接 client, err := mongo.Connect(ctx, o) if err != nil { fmt.Println("ConnectToDB", err) return } // 判断服务是不是可用 if err = client.Ping(context.Background(), readpref.Primary()); err != nil { fmt.Println("ConnectToDB", err) return } // 返回 client MongoDBClient = client.Database(dbName)}func ConnectToDB() { clientOptions := options.Client().ApplyURI("mongodb://admin:[email protected]:27017") var ctx = context.TODO() // Connect to MongoDB client, err := mongo.Connect(ctx, clientOptions) if err != nil { log.Fatal(err) } // Check the connection err = client.Ping(ctx, nil) if err != nil { log.Fatal(err) } fmt.Println("Connected to MongoDB!") // 返回 client MongoDBClient = client.Database("demo") //defer client.Disconnect(ctx)}// 插入单条数据func insertOne() { ash := Member{"13212345678", "123456", []string{"abc1", "efg1", "hij1"}} insertResult, err := MongoDBClient.Collection("test1").InsertOne(context.TODO(), ash) if err != nil { fmt.Println(err) } println("Inserted a single document: ", insertResult.InsertedID)}// 插入多条数据func insert() { var ash []interface{} ash = append(ash, Member{"13222222222", "123456", []string{"aaa", "bbb", "ccc"}}) ash = append(ash, Member{"13333333333", "123456", []string{"aaa1", "bbb1", "ccc1"}}) fmt.Println(ash) insertResult, err := MongoDBClient.Collection("test1").InsertMany(context.TODO(), ash) if err != nil { fmt.Println(err) } println("Inserted Multiple document: ", insertResult.InsertedIDs)}// 查问单条func findOne() { var result bson.M err := MongoDBClient.Collection("test1").FindOne(context.TODO(), bson.D{{"info", "aaa1"}}).Decode(&result) if err != nil { if err == mongo.ErrNoDocuments { //This error means your query did not match any documents. return } panic(err) } fmt.Println(result)}// 查问多条数据func find() { findOptions := options.Find() findOptions.SetLimit(10) cur, err := MongoDBClient.Collection("test1").Find(context.TODO(), bson.D{{"phone", "13333333333"}}, findOptions) if err != nil { fmt.Println(err) } var results []*Member for cur.Next(context.TODO()) { // create a value into which the single document can be decoded var elem Member err := cur.Decode(&elem) if err != nil { fmt.Println(err) } results = append(results, &elem) } if err := cur.Err(); err != nil { fmt.Println(err) } //fmt.Println(results) for _, v := range results { fmt.Println(v.Phone) fmt.Println(v.Name) fmt.Println(v.Info) }}func updateOne() { //如果过滤的文档不存在,则插入新的文档 opts := options.Update().SetUpsert(true) id, _ := primitive.ObjectIDFromHex("633b02b6e082e5046001d0b9") filter := bson.D{{"_id", id}} update := bson.D{{"$set", bson.D{{"phone", "1444444444444"}}}} result, err := MongoDBClient.Collection("test1").UpdateOne(context.TODO(), filter, update, opts) //result, err := MongoDBClient.Collection("test1").UpdateOne(context.TODO(), filter, update) if err != nil { panic(err) } fmt.Println(result)}func update() { filter := bson.D{{"name", "123456"}} update := bson.D{{"$set", bson.D{{"name", "张三"}}}} result, err := MongoDBClient.Collection("test1").UpdateMany(context.TODO(), filter, update) if err != nil { panic(err) } fmt.Println(result)}// 替换文档func replaceOne() { filter := bson.D{{"phone", "13222222222"}} replacement := bson.D{{"phone", "16666666666"}} result, err := MongoDBClient.Collection("test1").ReplaceOne(context.TODO(), filter, replacement) if err != nil { panic(err) } fmt.Println(result)}// 删除单个文件func deleteOne() { filter := bson.D{{"phone", "16666666666"}} result, err := MongoDBClient.Collection("test1").DeleteOne(context.TODO(), filter) if err != nil { panic(err) } fmt.Println(result)}// 删除多个func delete() { //filter := bson.D{{"runtime", bson.D{{"$gt", 800}}}} filter := bson.D{{"phone", "16666666666"}} results, err := MongoDBClient.Collection("test1").DeleteMany(context.TODO(), filter) if err != nil { panic(err) } fmt.Println(results)}type Member struct { Phone string Name string Info []string}func main() { //连贯数据库 ConnectToDB() //连接池连贯数据库 //ConnectToDBPool() //插入单条数据 //insertOne() //插入多条数据 //insert() //查找单条数据 //findOne() //查找多条数据 find() //批改单条数据 //updateOne() //批改多条数据 //update() //替换文档 //replaceOne() // 删除多个 //deleteOne() // 删除多个 //delete()}linkshttps://www.mongodb.com/docs/... ...

October 7, 2022 · 3 min · jiezi

关于mongodb:mongo-聚合操作

清空集合中的文档db.users.drop()数据筹备筹备 users 表数据 在 users 外面筹备一组数据,蕴含 item ,qty,status,tags 和 size 字段,其中 size 是内嵌文档,size 外面又蕴含了 h,w,uom 字段 db.users.insertMany([ { item: "canvas", qty: 100, size: { h: 28, w: 35.5, uom: "cm" }, status: "A" }, { item: "journal", qty: 25, tags: ["blank", "red", "small"], size: { h: 14, w: 21, uom: "cm" }, status: "A" }, { item: "notebook", qty: 50, tags: ["gray", "yellow", "green"], size: { h: 8.5, w: 11, uom: "in" }, status: "A" }, { item: "paper", qty: 100, tags: ["gray", "yellow", "green"], size: { h: 8.5, w: 11, uom: "in" }, status: "D" }, { item: "planner", qty: 75, tags: ["gray", "yellow", "green"], size: { h: 22.85, w: 30, uom: "cm" }, status: "D" }, { item: "postcard", qty: 45, tags: ["gray", "yellow", "green"], size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }, { item: "sketchbook", qty: 80, size: { h: 14, w: 21, uom: "cm" }, status: "A" }, { item: "sketch pad", qty: 95, size: { h: 22.85, w: 30.5, uom: "cm" }, status: "A" }, { item: "mat", qty: 85, tags: ["gray", "yellow", "green"], size: { h: 27.9, w: 35.5, uom: "cm" }, status: "A" }, { item: "mousepad", qty: 25, tags: ["gel", "blue", "big"], size: { h: 19, w: 22.85, uom: "cm" }, status: "A" }, { item: "mobile", qty: 250, tags: ["red", "big"], status: "A" }, { item: "map", qty: 250, length: [129, 500, 1000], status: "A" }, { item: "apple", qty: 250, length: [29, 50, 90], status: "A" }, { item: "banana", qty: 150, status: "A" }, { item: "orange", qty: 90, size: { h: 19, w: 22.85, uom: "cm" }, status: "A" }, { "_id" : 1, "sku" : "almonds", description: "product 1", "instock" : 120 }, { "_id" : 2, "sku" : "bread", description: "product 2", "instock" : 80 }, { "_id" : 3, "sku" : "cashews", description: "product 3", "instock" : 60 }, { "_id" : 4, "sku" : "pecans", description: "product 4", "instock" : 70 }, { "_id" : 5, "sku": null, description: "Incomplete" }, { "_id" : 6 }]);这里能够看到筹备的数据,最初 6 个文档,咱们本人指定了 _id 字段的值 ...

October 3, 2022 · 6 min · jiezi

关于mongodb:mongo的数据恢复和迁移

mongo的数据恢复和迁徙mongo单实例部署1.由一个mongo形成,对外提供服务。毛病:如果一个节点挂了,就没有方法对外提供服务。数据无备份,平安差。 mongo正本集部署1.正本集部署。个别是有3个节点(为了投票,和超过半数。如果2个节点,挂了一个,另外一个不能对外。不能选举成主节点)。惯例的有 primary - secondary - secondary (P - S - S) . 然而如果为了节约资源,能够将一个seconday改成仲裁节点Arbiter(只负责投票,不同步数据) ,变成了 P- S -A。挂了一个,另一个数据承载节点能够被选为主节点。 2.部署抉择,最好抉择P - S -S .这样挂了一个齐全不会有问题。 然而如果抉择 P - S -A 部署。挂一个数据节点。变成 P - A 。能够一段时间保留失常。然而几个小时后,缓缓的主节点变慢。flowControl机制限度主节点写入,还有其余的问题。 参考:https://www.mongodb.com/docs/... mongo分片集群部署mongos: 次要是做拜访路由, mongo_cs (config servers): 保留调配的元数据和分片的集群配置。从3.4版本后,改成了正本集的部署。 shard : 分片数据的承载节点。能够是正本集,也能够是单实例。个别为了平安都是正本集。 参考:https://www.mongodb.com/docs/... 分片集群的保护分片集群的问题,根本都是因为shard调配的数据问题。演绎也就是某个调配的正本集的数据有问题。因为正本集的压力个别都大。导致oom等各种问题。 如果发现mongo有问题。能够先进入mongos,执行sh.status()。查看集群分片信息。 进入问题的分片的mongod中,执行rs.status() 。能够看到具体的正本集的信息。能够看到正本集节点的状态信息。 正本集数据恢复正本集的主从同步是通过从节点去主节点查问oplog.而后在本人这个重放,达到数据的始终性。然而因为oplog的大小是受限的rs.printReplicationInfo()。所以如果一个节点down机太久。会导致主节点没有他须要的oplog.这是节点变成了stale状态。这种状况只能进行全量的数据同步。 计划一:先将故障节点平安关mongo,db.shutdownServer() ,间接将故障节点的数据目录备份。清空数据目录。而后重启。这样从节点会从主节点copy数据。能够在故障的节点查问日志。 INITSYNC 的关键字。能够看到执行的copy的信息。有点主节点能够持续服务。毛病:同时的工夫长。 计划二:将主节点平安关mongo。将数据的目录全量拷贝到故障节点。将故障节点的数据备份。而后将copy来的数据放到数据目录。而后主节点mongo启动,从节点启动。数据就统一了。 参考: https://www.mongodb.com/docs/... 危险操作有时候发现mongo长时间无奈优雅关机,导致最初kill -9 . 这种状况会呈现mongo的数据查看。而后mongo日志发现 REPL 的操作日志。查问操作日志的工夫。如果操作日志间隔以后工夫比拟近,最好期待。如果预计很长时间不能复原。且焦急复原服务的可用。在关机mongo。删掉数据目录中的mongd.lock文件,清空journal目录。这种办法会导致数据的失落。会回到上一个checkpoint的工夫点的数据。不是没有方法。不要应用该办法。 数据迁徙计划一: 分片集群的数据迁徙。通过mongodump将所有的数据导出,而后将数据倒入新的集群。长处:简略,毛病:工夫长。 计划二:mongod , mongo_cs都是正本集的部署。能够将原始的集群的正本集将新的机器退出。而后本成了6节点的正本集。而后将老机器从正本集中剔除。 操作步骤: 老集群的正本集的数据copy到新集群的对应机器。而后将新机器退出集群。数据同步实现就剔除老机器。更加具体的迁徙见官网文档。 ...

September 29, 2022 · 1 min · jiezi

关于mongodb:mongo-系列聚合知识点梳理

什么是聚合数据?咱们先来看看是是聚合数据 数据聚合(Data Aggregation)是指合并来自不同数据源的数据。. 聚类也称聚类分析,亦称为群集剖析,是对于统计数据分析的一门技术, 在许多畛域受到广泛应用,包含机器学习,数据挖掘,模式识别,图像剖析以及生物信息。 什么是聚合查问?聚合操作解决数据是记录并返回计算结果的 局和操作组的值来自多个文档,能够对分组数据执行各种操作以范畴单个后果 聚合操作个别蕴含上面三类: 繁多作用聚合聚合管道MapReducehttps://docs.mongodb.com/manu... 繁多作用聚合mongodb 本身提供如下几个繁多作用的聚合函数,这些繁多的聚合函数,绝对聚合管道和mapReduce 来说不够灵便,也不足丰盛的性能 db.汇合名字.estimatedDocumentCount()粗略的计算文档的个数,是一个估计值 db.汇合名字.count()计算文档的数量,是通过聚合来计算的 db.汇合名字.distinct()查看某一个字段都有哪些值 例如: > db.users.find(){ "_id" : ObjectId("61584aeeee74dfe04dac57e9"), "name" : "xiaokeai", "age" : 25, "hobby" : "reading", "infos" : { "tall" : 175, "height" : 62 }, "school" : "cs" }{ "_id" : ObjectId("615a56d6bc6afecd2cff8f96"), "name" : "xiaozhu", "age" : 15, "hobby" : "basketball", "infos" : { "tall" : 190, "height" : 70 }, "school" : "sh" }{ "_id" : ObjectId("615a5856d988690b07c69f64"), "name" : "xiaopang" }{ "_id" : ObjectId("615a5917d988690b07c69f66"), "name" : "nancy", "age" : 25, "hobby" : "study", "infos" : { "tall" : 175, "height" : 60 }, "school" : "hn" }{ "_id" : ObjectId("615a5917d988690b07c69f67"), "name" : "job", "age" : 19, "hobby" : "basketball", "infos" : { "tall" : 170, "height" : 70 }, "school" : "nj" }> db.users.distinct("age")[ 15, 19, 25 ]上述例子,应用 db.users.distinct("age") 查看 age 字段存在的 value 有哪些 ...

September 25, 2022 · 2 min · jiezi

关于mongodb:mongo-系列常用操作实际操练

插入数据> db.users.insert({"name" : "xiaomotong", "age" : 18})> db.users.insert({name:"xiaozhu",age:15,hobby:"basketball",infos:{tall:190,height:70},school:"sh"})> db.users.insertMany([{name:"xiaopang"},{name:"wangwu"}])> db.users.insertMany([{name:"nancy", "age" :25, "hobby" : "study", "infos" : { "tall" : 175, "height" : 60 }, "school" : "hn" },{name:"job", "age" : 19, "hobby" : "basketball", "infos" : { "tall" : 170, "height" : 70 }, "school" : "nj" }])能够应用 insert,insertOne,insertMany 插入不同的数据,各取所需,其中 insertMany 用于插入多条数据,当然也能够插入 1 条数据 mongodb 在插入数据下面还有这么多函数办法能够应用,各取所需 更新数据> db.users.find(){ "_id" : ObjectId("61584aeeee74dfe04dac57e9"), "name" : "xiaomotong", "age" : 18 }...> db.users.update({name:"xiaomotong"},{$set:{name:"xiaokeai",age:25,hobby:"reading",infos:{tall:175,height:62},school:"cs"}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })应用 $set 示意须要更新字段 ...

September 17, 2022 · 3 min · jiezi

关于mongodb:活动报名-MongoDB-核心功能及其原理分析

对于 MongoDB ,还有更多问题心愿失去解答?欢送加入 MongoDB 中文社区线上直播交流活动! 想要在文字版的图片文档根底之上,获取更多延长、拓展材料,更直观、疾速地理解更多无关 MongoDB 的外围个性解析?想要减速厘清 MongoDB 罕用性能的介绍,搞懂罕用性能的关系?想要在 MongoDB 存储引擎 Wired Tiger 进行重要设计把握场景中的技术需要?想要深刻理解 MongoDB 确保数据一致性和高可用保障?9 月 27 日(星期二)15:00,腾讯高级研发工程师-陈建辉,助您部署和治理 MongoDB 外围性能及其原理剖析的领导。 更多流动信息及报名形式,详见海报:立即扫码,报名观看

September 16, 2022 · 1 min · jiezi

关于mongodb:MongoDB-时序新特性

目录: 解析 MongoDB 新个性“时序”如何在 MongoDB 中应用时序?MongoDB 时序汇合性能MongoDB 时序 IOT 场景设计一、解析 MongoDB 新个性“时序” MongoDB 时序汇合是 MongoDB 5.0 新推出的性能,他能疾速将段时间内的数据写入磁盘,并且提供疾速时序检索的汇合。与一般汇合相比,时序汇合在数据插入的过程中,主动将数据依照工夫维度组织成最优的存储格局,也为前面应用程序对时序数据进步了查问效率。MongoDB 传统时序模式:假如咱们有一个传感器每分钟测量温度并将其保留到数据库中,咱们须要写入数据库中的数据流: {_id: ObjectId(), deviceid: 1, date: ISODate ("2019-11-10"), samples : [{ temperature: 10, time: 1573833152},]},{_id: ObjectId(), deviceid: 1, date: ISODate ("2019-11-10"), samples : [[ temperature: 15, time: 1573833153},]},{_id: ObjectId(), deviceid: 1, date: ISODate ("2019-11-10"), samples : [[ temperature: 14, time: 1573833154},]},{_id: ObjectId(), deviceid: 1, date: TSODate("2019-11-10"), samples : [[ temperature: 20, time: 1573833155},]}桶模式设计数据模型:{ _id: objectId(), deviceid: 1, date: ISODate ( "2019-11-10") , first: 1573833152, last: 1573833155, samples : [ { temperature: 10, time: 1573833152}, { temperature: 15, time : 1573833153}, { temperature: 14, time: 1573833154), { temperature: 20, time : 1573833155} ]}字段解释: ...

September 6, 2022 · 2 min · jiezi

关于mongodb:基本-nosql-和-mongodb等数据库对比基本-nosql-和-mongodb等数据库对比

咱们工作或者学习的过程中,接到一个需要,或者学习一个技能的时候,咱们是如何去学习的呢? 我想大略分成如下几步吧: 理解背景,理解这个技术或者需要的背景,个性,定律等等比照学习,进行同类事物比照关联学习,关联已知的常识进行学习一起来看看 NOSQL 是什么 这里来举荐一个看数据排名的地址: DB-Engines 这里能够看到各种类型的数据库排名,数据库选型的时候这个网址就很香了 NOSQL 是什么咱们先来列举一下传统型数据库的特点: 结构化二维表E-R关系(实体-关系模型)sql 标准化反对事务(ACID)锁索引sql ,是结构化查询语言,泛指关系型数据库 nosql (not noly sql),不仅仅是 sql ,这泛指不提供 sql 性能的非关系型数据库 它不遵循 sql 的规范,acid 个性,表构造等个性。 最开始 nosql 实际上是 not sql ,前面缓缓倒退成 not only sql 简述 nosql 的倒退历史: 列式存储 – 键值对存储 – 文档存储 – 图形存储 为什么须要 NOSQL?大抵列举如下几点: 因为古代网络的倒退,大多是超大规模高并发的 web 2.0 动静网站对于大量数据,关系型数据库曾经遇到瓶颈,性能方面和扩展性方面的瓶颈如何解决大规模数据汇合,多重数据品种带来的挑战,这就须要 nosql 来解决了mysql 等关系型数据库利用在大数据下面,显然是一个难题了罕用的四大类 NOSQL 数据库的优缺点比照分类劣势劣势场景代表键值对查找速度快数据无结构化,通常只是用来作为字符串或者二进制内容缓存,次要用于解决大量数据的高频拜访负载reids列式存储查找速度快,反对分布式横向扩大,数据压缩率搞性能绝对受限用于分布式文件系统HBase文档存储数据结构要求不严格,表构造可变查问性能不高,不足对立的查问语法用于web 利用等MongoDB图形数据库能够利用图构造相干等算法须要对整个图做计算,不利于图数据的分布式存储用于社交网络,举荐零碎,动向图,趣味图,关系图等等Neo4J咱们能够晓得 es 也是 文档存储的 nosql ,那么 es 和 mongodb 有什么异同的呢? mongodb 和 elasticsearch 相同点: ...

September 2, 2022 · 1 min · jiezi

关于mongodb:技术分享-mlaunchMongoDB-测试环境快速构建工具

作者:余振兴 爱可生 DBA 团队成员,热衷技术分享、编写技术文档。 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 目录:一、mlaunch 及 MongoDB软件装置二、mlaunch 部署正本集及运维操作三、mlaunch 部署分片集群四、mlaunch 罕用部署架构命令示例五、参考链接咱们在应用和学习 MongoDB 过程中不免遇到须要部署各类架构进行功能性验证,因为不同的架构和配置,使得咱们在搭建环境过程中须要破费大量工夫,这里举荐应用一款可疾速部署 MongoDB 测试环境各类架构的工具 mlaunch ,它是 MongoDB 一组开源工具包 mtools 中的一个(对 mtools 的其余工具有趣味也可查看文末链接地址理解详情),可用来在测试环境疾速部署不同架构的 MongoDB 服务,反对单节点、正本集以及分片集群,装置及操作均非常简略,以下给到罕用场景和架构的部署示例一、mlaunch 及 MongoDB软件装置## 装置python3,及MongoDB服务的依赖包shell> yum install -y python3 python3-devel net-snmp-agent-libs ## 装置 mlaunch 依赖包shell> pip3 install mtools psutil pymongo ## MongoDB软件包装置(解压即可),MongoDB软件包自行下载,以后示例服务器下载了2个版本软件包,能够任意指定其中版本shell> ll -ld /opt/mongodb-linux-x86_64-*drwxr-xr-x 4 root root 148 8月 16 18:30 /opt/mongodb-linux-x86_64-enterprise-rhel70-4.0.16-rw-r--r-- 1 root root 120608697 8月 16 18:30 /opt/mongodb-linux-x86_64-enterprise-rhel70-4.0.16.tgzdrwxr-xr-x 3 root root 100 8月 16 18:31 /opt/mongodb-linux-x86_64-rhel70-4.4.14-rw-r--r-- 1 root root 72399766 8月 16 18:25 /opt/mongodb-linux-x86_64-rhel70-4.4.14.tgz二、mlaunch 部署正本集及运维操作## 初始化一个3节点的正本集## 正本集名称为 demo_replicatset## 起始端口为 30000## 指定30000端口的优先级最高(优先级默认为1,主节点调整为10,值越高,优先级越高)## 版本为 4.4.14## 数据目录为 /data/demo_rsshell> mlaunch init --replicaset --nodes 3 --name "demo_replicatset" --priority --port 30000 --binarypath /opt/mongodb-linux-x86_64-rhel70-4.4.14/bin --dir /data/demo_rslaunching: "/opt/mongodb-linux-x86_64-rhel70-4.4.14/bin/mongod" on port 30000launching: "/opt/mongodb-linux-x86_64-rhel70-4.4.14/bin/mongod" on port 30001launching: "/opt/mongodb-linux-x86_64-rhel70-4.4.14/bin/mongod" on port 30002replica set 'demo_replicatset' initialized. ## 查看部署运行的正本集状态shell> mlaunch list --dir /data/demo_rs/PROCESS PORT STATUS PIDmongod 30000 running 9017mongod 30001 running 9065mongod 30002 running 9113 ## 登录正本集(默认无明码,可也在初始化时指定)shell> /opt/mongodb-linux-x86_64-rhel70-4.4.14/bin/mongo --host=localhost:30000demo_replicatset:PRIMARY> ## 进行该正本集shell> mlaunch stop --dir /data/demo_rs/sent signal Signals.SIGTERM to 3 processes. ## 重启启动该正本集shell> mlaunch start --dir /data/demo_rs/launching: "/opt/mongodb-linux-x86_64-rhel70-4.4.14/bin/mongod" on port 30000launching: "/opt/mongodb-linux-x86_64-rhel70-4.4.14/bin/mongod" on port 30001launching: "/opt/mongodb-linux-x86_64-rhel70-4.4.14/bin/mongod" on port 30002 ## 删除该正本集(进行后间接删除目录即可)shell> rm /data/demo_rs/ -rf三、mlaunch 部署分片集群## 创立3节点的分片,每个节点只有1个主(思考服务器配置无限)## 配置3节点configServer## 配置1个mongosshell> mlaunch init --sharded 3 --nodes 1 --replicaset --config 3 --csrs --mongos 1 --priority --name "demo_shard" --port 30000 --binarypath /opt/mongodb-linux-x86_64-rhel70-4.4.14/bin --dir /data/demo_shardlaunching: "/opt/mongodb-linux-x86_64-rhel70-4.4.14/bin/mongod" on port 30001launching: "/opt/mongodb-linux-x86_64-rhel70-4.4.14/bin/mongod" on port 30002launching: "/opt/mongodb-linux-x86_64-rhel70-4.4.14/bin/mongod" on port 30003launching: config server on port 30004launching: config server on port 30005launching: config server on port 30006replica set 'configRepl' initialized.replica set 'shard01' initialized.replica set 'shard02' initialized.replica set 'shard03' initialized.launching: /opt/mongodb-linux-x86_64-rhel70-4.4.14/bin/mongos on port 30000adding shards. can take up to 30 seconds... ## 查看部署的集群架构及根本信息[root@10-186-61-159 ~]# mlaunch list --dir /data/demo_shard/PROCESS PORT STATUS PIDmongos 30000 running 15820config server 30004 running 15514config server 30005 running 15567config server 30006 running 15620shard01 mongod 30001 running 15377shard02 mongod 30002 running 15422shard03 mongod 30003 running 15469 ## 登录集群shell> /opt/mongodb-linux-x86_64-rhel70-4.4.14/bin/mongo --host=localhost:30000mongos>四、mlaunch 罕用部署架构命令示例## 单节点正本集mlaunch init \--replicaset \--priority \--nodes 1 \--name "demo_single_rs" \--port 30000 \--binarypath /opt/mongodb-linux-x86_64-rhel70-4.4.14/bin \--dir /data/demo_single_rs ## 正本集 PSS 架构mlaunch init \--replicaset \--priority \--nodes 3 \--name "demo_replicatset" \--port 30000 \--binarypath /opt/mongodb-linux-x86_64-rhel70-4.4.14/bin \--dir /data/demo_rs ## 正本集 PSA 架构mlaunch init \--replicaset \--priority \--arbiter \--nodes 3 \--name "demo_replicatset" \--port 30000 \--binarypath /opt/mongodb-linux-x86_64-rhel70-4.4.14/bin \--dir /data/demo_rs ## 分片集群高可用架构## 3节点ConfigServer 正本集## 3节点shard分片节点 正本集## 3节点mongos 高可用mlaunch init \--sharded 3 \--nodes 3 \--replicaset \--config 3 \--mongos 3 \--csrs \--priority \--name "demo_shard" \--port 30000 \--binarypath /opt/mongodb-linux-x86_64-rhel70-4.4.14/bin \--dir /data/demo_shard五、参考链接http://blog.rueckstiess.com/m... ...

September 1, 2022 · 2 min · jiezi

关于mongodb:MongoDB-模糊查询

在搜寻接口的开发中,常常会遇到须要含糊匹配的场景,记录一下MySQL和MongoDB别离是怎么做的。比照-- SQL:SELECT * FROM users WHERE username LIKE "%l%"-- MongoDB:db.users.find({username: /l/})// 或者db.users.find({username: { $regex: 'l'})LIKE含糊查问username以字母"张"结尾的数据(张%)-- SQL:SELECT * FROM users WHERE username LIKE "张%"-- MongoDB:db.users.find({username: /^张/})

August 28, 2022 · 1 min · jiezi

关于mongodb:开源中国专访-TJ开源许可证欢迎来到云时代

前言开源许可证从最早的 GPL 开始, 逐步演进到 GPLv2 和 v3,两头还有 Apache、MPL、AGPL、LGPL 等,然而近几年来有一批新的许可证的呈现,引起了社区的一些强烈的探讨。这些新的许可证包含 BSL、SSPL、Elastic 以及一个比拟非凡的附加条款 Commons Clause。 社区内从争执的角度次要分为两大阵营:原教旨主义和实用主义。 原教旨主义的同学们认为只有听从1998年成立的 Open Source Initiative(OSI)定义的10大准则,通过OSI 这个组织审核认证过的(OSI-Certified),才能够称之为开源的许可证。 实用主义则从开源自身的目标登程,认为在源代码凋谢,绝大部分的社区开发者在应用或者奉献时不受影响的状况下,不用纠结于字面的定义如何,对社区无益即可。 依照 OSI 的开源许可证规定,目前应用 SSPL 的 MongoDB,应用 Elastic License V2 的 Elastic Search、Airbyte,应用 BSL 的 CockroachDB, 以及附加了 Common Clause 的 Redis,这些赫赫有名的开源软件,都不能称之为“开源软件”了。 那么问题来了?如果因为下面的起因,这些软件不被认为是开源了,是 Proprietary 软件了,难道咱们真的叫这些咱们曾经始终在收费应用,并且能够继续应用很好的软件为“闭源软件”或者“商业软件”?如同也不太对。“源代码可用”,稍微绕口了一点。 让咱们先从以 SSPL 为代表的新一代开源软件厂商和 OSI 的角度别离来看一下这个问题两个对立面的一些底层逻辑。最初咱们再来分享下对于云时代开源许可证的一些观点。 我所晓得的 SSPLMongoDB是一个十分受程序员喜爱的 NoSQL 数据库,我是12年左右在硅谷和敌人守业的时候接触到的。在花了一个周末改写了几千行 Python 代码,把和 MySQL 的交互改成了 MongoDB 之后,原本用意是改善并发性能的我却发现了一个意外的惊喜:代码行数放大到了小几百行,是原来的15%——从此我就义无反顾地开始了我的 NoSQL 之路。 因为在社区比拟沉闷,本人也写了一个和 MongoDB 相干的开源 NodeJS 组件,所以在13年创业项目进行后我就退出了 MongoDB。在我退出的时候,MongoDB 曾经成立6年了,人员规模也有300~400人,每年收入一亿美元,支出呢?过后 MongoDB 的次要营收来自于一些咨询服务和企业版的售卖。然而咨询服务支出切实是少得可怜,企业版也不太好卖,最大的竞品是本人:开源版本。所以只能始终依附大量风投资本一直输血。可是融资曾经到了F轮,投资人的急躁终于告罄。在一场董事会后,过后的 CEO 和 CRO 整体撤下,换成一个久经沙场的职业经理人 Dev Ittycheria。 ...

August 15, 2022 · 3 min · jiezi

关于mongodb:活动报名-MongoDB-使用规范及最佳实践线上直播来啦

在互联网利用疾速倒退的明天,MongoDB 以高性能、可扩大、易部署、易使用,存储数据不便等个性在 NoSQL 畛域怀才不遇。MongoDB 为那些对各个存储的容量、性能及系统配置进行的容量评估、数据和字段类型、以及数据校验都有很高要求的利用打造更加稳固牢靠、晦涩高效的服务体验。 随着新型数据库和国产数据库越来越多,MongoDB 的疾速遍及和使用量的快递增长。尽管 MongoDB 与 Oracle、MySQL、SQLServer 等数据库的个性不一样,然而对于经验丰富数据库系统的人员来说,MongoDB 的一些操作、校验、存储过程还是有很多类似点。对 MognoDB 的应用标准的强烈诉求与传统解决方案的有余之间的矛盾日益突出。 想要更直观、疾速地理解无关 MongoDB 的使用指南与注意事项,而不局限于文字版的官网我的项目文档?想要弄清 MongoDB 数据及字段类型的外延,把握场景中数据和技术需要?想要对 MongoDB 存储的容量、性能及系统配置进行精确的评估?想要深刻理解 MongoDB 的数据校验,保障数据库数据的一致性?... ...对于 MongoDB ,还有更多问题心愿失去解答?欢送加入 MongoDB 中文社区线上直播交流活动! 8 月 20 日(星期六)15:00,MongoDB 中文社区常委会委员兼北京分会主席、某互联网公司数据库及运维负责人李丹,助您部署和治理 MongoDB 提供从应用标准到最佳实际的领导。更多流动信息及报名形式,详见海报:立即扫码,报名观看

August 11, 2022 · 1 min · jiezi

关于mongodb:mongo的基本整理

mongomongo的根本命令db.help() 查看db命令帮忙 rs.help() // 在mongod中执行 sh.help() // 数据库分片的相干指令,须要在mongos中执行。 db.listCommands() // mongo的所有的命令都能够应用 db.runCommand()执行 db.adminCommand({getParameter:"*"}) // 查看服务器的以后配置参数。 db.adminCommand({setParameter:1, enableFlowControl: false}) 能够批改对应的值,这里批改的是enableFlowControl设置为false. mongo分片shard 命令sh.status() sh.isBalancerRunning() sh.enableSharding() sh.shardCollection() Sharded Clustershard: 分片,个别每个分片由一个正本集形成。mongos: 个别解决query路由器。提供client和 sharded cluster 接口config servers : 存储元数据和config文件主分片primary shard在sharded cluster中,每个数据库都会设置主的shard,也就是如果这个数据库中的表没有启用分片,默认数据全副在这个分片。相似一般的正本集。 如果启动了分片,数据会根据分片的片键散布在多个shard中。 片键sharded cluster的汇合如果启用了分片,须要设置指定的分片的片键,数据会根据片键调配到不同的shard中。片键须要思考的至多有三个方面分片建的基数,平率,枯燥性。 分片建的基数,如果分片建只有4个值,最多能够创立4个分片,再多的分片没有用,不会有数据路由下来。分片建的频率,如果数据绝大数都是某个建值数据,那么就会造成数据而后绝大多数都在一个分片上,不能平均调配。调配的枯燥性,如果枯燥增减的数据,可能因为一个范畴的数据被调配到一个分片,如工夫戳分片,那么一个时间段只会在一个分片上,此时相当于单分片写入。mongoDB 正本集相干问题。mongo 正本集命令rs.status() // 查看mongo正本集状态. rs.config() //查看正本集的配置,能够获取 writemajority的数目,正本节点的投票权等配置信息 rs.add("host:port") // 退出节点。 rs.remove("host:port") // 移除节点。 rs.addArb("host:port") // 退出仲裁节点 var config = rs.config() // 批改正本集的配置办法config.members[1].priority=100 // 设置投票的优先级为 100rs.reconfig(config) // 重新配置config rs.printSecondaryReplicationInfo() // 查看从节点的oplog状态 ...

August 8, 2022 · 2 min · jiezi

关于mongodb:第五届数字中国建设峰会举行每日互动发布每日治数平台DIOS创新成果

第五届数字中国建设峰会及成绩展览会近日在福州隆重开幕,数据智能上市企业每日互动(股票代码:300766)携数据智能翻新成绩亮相峰会现场(展位号:6号馆 6G01)。 7月24日下午,每日互动治数平台部副总经理袁凯在峰会的成绩发布会现场,为大家介绍了每日治数平台DIOS的最新产品停顿,并就平台在智慧高速、城市治理、品牌营销等畛域的翻新利用进行了深刻分享。  每日治数平台DIOS,助力行业数智化麻利降级每日治数平台DIOS是每日互动重磅打造的数据智能操作系统。平台以助力客户业务胜利为指标,帮忙行业客户和相干政府单位解决数字化转型中遇到的痛点难题,并将可复用的数据能力、业务能力、效率工具积淀下来,打造数据产品引擎与提效工具,减速客户业务翻新过程,助力行业数智化麻利降级。 ▲每日互动治数平台部副总经理袁凯在第五届数字中国建设峰会公布每日治数平台翻新成绩  袁凯示意:“近两年各行业的数字化转型都在一直深入。很多企业组织其实曾经实现了业务的在线化和数据化,积攒了大量数据。然而如何买通数据的供应端和需要端,高效地把数据资产用起来,实现数据驱动的业务增长?这是当下很多企业实现数字化降级亟需解决的痛点。”  基于以上这些认知和理念,每日互动对治数平台进行了产品设计、性能体验、操作应用等多方面的翻新迭代,实现了从数据生产到数据治理再到数据利用全流程的效率降级、价值降级和能力降级,心愿帮忙企业里的业务人员、工程师们更加便捷地剖析数据和利用数据,让更多的企业和用户可能享受到数智的红利,真正实现数智普惠。  效率降级:可视化操作和交互界面,帮忙客户高效治理和剖析数据为升高企业数字化降级的门槛,缩小企业在开发和应用数据过程中的人力、工夫等老本投入,每日治数平台DIOS实现了可视化灵便交互,帮忙客户更加高效地治理、应用和剖析数据。比方,每日治数平台的机器学习产品模块通过可视化的操作和交互界面,使AI模型构建的门槛大幅升高。业务人员无需写一行代码,即可疾速创立机器学习预测模型。  ▲每日治数平台翻新成绩公布现场  袁凯还为大家分享了某美妆品牌客户应用每日治数平台进行机器学习的案例:以往,撑持业务的算法专家须要破费较长的工夫能力实现一个机器学习模型的搭建。现在,依靠每日治数平台的机器学习产品模块,该客户的业务经营人员也可能自主操作,进行算法建模,在1-2两个小时的工夫里,就疾速实现了预测购买模型的训练,实现了对消费者购买后劲的智能预测。针对高购买后劲人群,该美妆品牌客户进行定向曝光和触达,最终使广告投放ROI晋升了近3倍。  通过赋能一线业务人员,每日治数平台帮忙客户真正实现了数字化过程中的效率降级。  价值降级:低代码构建数据利用,让数据价值中转业务一线每日治数平台采纳低代码的设计理念,使数据开发工程师、数据分析师、业务人员、管理者等多元角色都能在每日治数平台上自助式地利用数据,让数据价值中转业务一线。  袁凯还为大家具体介绍了每日治数平台全新推出的数据【我的项目核心】和【利用核心】模块。通过这两个模块,营销、HR、财务等不同部门的业务人员也够能灵便创立数据看板、数据门户等数据利用,更及时、迅速地响应业务场景中遇到的多样化数据需要。  比方,企业的销售部门能够应用每日治数平台,对线索转化漏斗、线索评级散布进行剖析,并通过便捷的配置操作,疾速生成数据看板。通过清晰的可视化图表,管理人员和销售人员都可能更直观地理解业务拓展现状,更加高效地发展客户经营工作。  能力降级:对立数据智能底座,减速数据产品翻新落地为了使数据价值在更宽泛的业务场景中落地,每日互动将公司的数据智能服务能力积淀到了每日治数平台中,造成可灵便调用的能力组件、行业标签模板、算法模型库等,为客户的数智化翻新赋能提效。  ▲每日治数平台为垂直行业客户的数智化翻新赋能提效  每日治数平台可能为相干政府单位、行业企业、集成商等客户打造本身的数据智能底座,帮忙行业客户将数据能力和行业教训积淀下来,在数据智能底座的撑持下,更加轻量化地开发、扩大新的数据产品,防止大量重复性的开发工作,实现麻利高效的数智化翻新。  当下,各行各业的数字化降级热火朝天,高效利用数据资产的能力曾经成为企业将来倒退的外围竞争力。每日互动心愿通过每日治数平台DIOS及一系列业余的数据智能产品/服务,帮忙行业客户更高效地生产和治理数据,为多元角色用户应用数据提供便当,最终实现数智普惠,推动各行业的数智化降级。 正如第五届数字中国建设峰会的主题,“翻新驱动新改革,数字引领新格局”,每日互动作为国内业余的数据智能服务商,也将继续开拓创新,一直降级数据智能服务水平,为数字中国的建设提供更多助力。

July 25, 2022 · 1 min · jiezi

关于mongodb:总结本周遇到的问题

问题一 后盾我的项目无奈新建java类并且注解为灰色:当我像平常一样通过作为我的项目关上pom.xml时发现关上后只显示这些文件于是我尝试间接关上我的项目文件夹,关上之后发现所有注解都是灰色的并且在新建里没有新建java类这一项。然而通过运行mvn spring-boot:run却发现可能失常运行。在网上查找材料发现这和maven无关。并且发现通过这样关上右侧没有maven这一栏,这也就阐明须要增加maven我的项目,在网上搜寻相应办法后只需全局搜寻maven并将pom.xml作为maven我的项目增加即可。然而对于为什么会触发这样的问题,在其余我的项目中依照之前的打开方式就没有问题,还没有找到很好的解释。 问题二 Docker 装置 MongoDB:抉择装置最新版本 docker pull mongo:latest查看是否曾经装置mongo 装置完之后能够应用此命令来运行mongo容器docker run -itd --name mongo -p 27017:27017 mongo --auth -p 27017:27017 :映射容器服务的 27017 端口到宿主机的 27017 端口。内部能够间接通过 宿主机 ip:27017 拜访到 mongo 的服务。--auth:须要明码能力拜访容器服务。如果呈现上面报错则证实该容器曾经存在,须要更换名称或是间接运行该容器 docker: Error response from daemon: Conflict. The container name "/mongo" is already in use by container "5ce065ddce059a1d022b386c6238486e9d7e943fed58794a1f44d0cefb0efd62". You have to remove (or rename) that container to be able to reuse that name.See 'docker run --help'.应用如下操作可查看所有docker容器 docker ps -a应用上面命令可删除容器 ...

July 17, 2022 · 1 min · jiezi

关于mongodb:线上活动-如何运用-MongoDB-可调一致性报名直播技术大佬带你了解

MongoDB 作为一个典型的分布式系统将诠释如何实现一致性等级与最小性能的影响。助力于进步数据的可用性能,同时解决产生在不同节点的读写,也能够获取到最新的数据并保证数据的一致性。 注册本次直播,您将理解到 MongoDB 一致性的最优性能及最佳实际! 分享嘉宾:张耀星 MongoDB 中文社区常委会委员 MongoDB 中文社区论坛联席主席 MongoDB 北亚区首席技术咨询服务参谋 工夫:2022年7月21日(周四)19:00 模式:在线直播 扫描下方二维码立刻预约报名! 关注上文公众号(Mongoing中文社区)即可报名。 社区招募 为了让社区组委会成员和志愿者敌人们灵便参加,同时咱们为想要深度参加社区建设的搭档们开设了“招募通道”,如果您想要在社区外面结交气味相投的技术搭档,想要通过在社区积淀有价值的干货内容,想要一个展现本人的舞台,晋升本身的技术影响力,即刻退出社区奉献队伍~ 点击提交申请 社区单干 接下来咱们会在诸多城市举办技术大会,如果您有优质的议题和 MongoDB 相干教训的嘉宾能够与咱们分享,或者有资助合作意向的小伙伴,蕴含但不限度于联结主办方、媒体单干等,都能够随时分割咱们的社区助手小芒果(微信ID:mongoingcom)沟通具体事宜。 重要资讯 感激大家始终以来对社区的关注与反对!社区在大家独特的致力下一直的倒退与壮大,为了给大家营造更便捷的交换环境,QQ 技术交换群将同步在“微信技术交换群”中。扫描下方二维码增加小芒果微信发送“mongo”即可进入技术交换群。

July 14, 2022 · 1 min · jiezi

关于mongodb:阿里云服务器-安装-MongoDB-数据库-详细步骤

1. 下载curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.9.tgz2. 解压tar zxvf mongodb-linux-x86_64-3.2.9.tgz3. 挪动到指定目录 并 重命名mv mongodb-linux-x86_64-3.2.9/ /usr/local/mongodbmv 挪动命令mv 空格 前面紧跟的为 原文件名mv 空格 原文件名 空格 挪动的地位并重新命名为4. 配置目录mkdir -p /usr/local/mongodb/datatouch /usr/local/mongodb/mongod.logtouch /usr/local/mongodb/mongodb.conf5. 关上 mongodb 配置文件vim /usr/local/mongodb/mongodb.conf抉择 E, 并按下键盘的 i 键,进入编辑模式,编辑胜利后,ESC键 退出编辑模式。输出 :wq! , 写入 保留文件 并 退出6. 批改 mongodb 配置文件port=27017dbpath= /usr/local/mongodb/data/dblogpath= /usr/local/mongodb/logs/mongodb.loglogappend=truefork=truemaxConns=100noauth=truejournal=truestorageEngine=wiredTigerbind_ip = 0.0.0.07. 配置环境变量vim ~/.bashrc7.1 环境变量如下export PATH=$PATH:/usr/local/mongodb/bin8 凋谢服务端口阿里云配置配置 27017 端口为关上状态source ~/.bashrc 使配置失效启动 或 敞开 mongodb 数据库 服务# 开启数据库cd /usr/local/mongodb/bin./mongod --config /usr/local/mongodb/mongodb.conf# 敞开数据库cd /usr/local/mongodb/bin./mongod -shutdown -dbpath=/usr/local/mongodb/data8 受权近程连贯/sbin/iptables -I INPUT -p tcp --dport 27017 -j ACCEPT

June 29, 2022 · 1 min · jiezi

关于mongodb:Mac-OS-使用-brew-安装-mongodb-数据库

装置$ brew tap mongodb/brew$ brew install mongodb-community@4.2开启数据库$ brew services start mongodb-community@4.2敞开数据库$ brew services stop mongodb-community@4.2后盾 开启运行 数据库$ mongod --config /usr/local/etc/mongod.conf --fork后盾 敞开运行 数据库> db.adminCommand({ "shutdown" : 1 })后盾 开启运行数据库,要应用 mongo shell 控制台 应用如下 命令敞开db.adminCommand({ "shutdown" : 1 })阐明配置文件:/usr/local/etc/mongod.conf日志文件门路:/usr/local/var/log/mongodb数据寄存门路:/usr/local/var/mongodb以上文件 运行 brew 装置命令主动配置的,不须要自行配置mongodb 默认端口27017扩大brew 搜寻 软件 $ brew search mongodb

June 28, 2022 · 1 min · jiezi

关于mongodb:MongoDB-关系实现

前言MongoDB不同于咱们罕用的mysql,作为一款非关系型数据库,数据存储已相似于json格局存储在文档里,不存在外建,无奈实现mysql的表格之间关联。那么,对于一对一,一对多,多对一,多对多关系如何实现呢? 一对多对于一条班级数据 { "_id":ObjectId("52ffc33cd85242f436000001"), "name": "软件181班", "number": "36"}与多条学生数据 { "_id":ObjectId("52ffc33cd85242f436000002"), "name": "张三", "num": "185762", "address": "河北省XX市"}{ "_id":ObjectId("52ffc33cd85242f436000003"), "name": "李四", "num": "185763", "address": "河北省XX市"}有嵌入和援用两种办法 嵌入{ "_id":ObjectId("52ffc33cd85242f436000001"), "name": "软件181班", "number": "36", "student": [ { "name": "张三", "num": "185762", "address": "河北省XX市" }, { "name": "李四", "num": "185763", "address": "河北省XX市" }]}长处是一次查问便可找到关联数据。毛病是随着关联数据量的减少,会减少读写工夫。 援用{ "_id":ObjectId("52ffc33cd85242f436000001"), "name": "软件181班", "number": "36", "student_ids": [ ObjectId("52ffc4a5d85242602e000001"), ObjectId("52ffc4a5d85242602e000002") ]}援用形式,对于学生根底数据存储在学生表,一条班级数据只存储所有相干学生id。关联查问时,须要两次查问,第一次查问班级信息,第二次应用班级关联学生id查问学生信息。长处是当大量关联数据时缩小一次读写工夫。毛病是造成屡次查问,减少查问工夫。 多对多对于多对多关系咱们须要具体问题具体分析。比方图书和标签多对多。只须要查找图书对应标签,而没有通过标签查找图书性能(如果没有)。那么只须要在一张表去记录图书和标签数据即可。 { "_id":ObjectId("00000111111"), "name": "计算机组成原理", "tag": [ { "name": "计算机", }, { "name": "考研", }]}{ "_id":ObjectId("00000111111"), "name": "汤家凤高等数学18讲", "tag": [ { "name": "数学", }, { "name": "考研", }]}然而对于课程和班级多对多来讲,咱们有时须要查问班级上哪几门课程,有时须要查问这门课程都哪几个班级上,然而大多状况下都是查问班级上哪几门课程。咱们就能够设置一个班级表,一个课程表,在班级表下关联相干课程。班级表 ...

June 27, 2022 · 1 min · jiezi

关于mongodb:活动报名-MongoDB-50-时序存储特性介绍

工夫序列数据越来越多的呈现在物联网、股票交易、信息流、社交媒体等古代外围利用中。随着从批处理到实时的转变零碎,工夫序列能够无效捕捉和剖析数据,同时进步经营效率以降低成本和危险。 MongoDB 时序汇合是 MongoDB 5.0新推出的性能,能疾速将一段时间内的数据写入磁盘,并且提供针对时序数据的查问、剖析及洞察能力。 立刻注册本次研讨会,您将理解到 MongoDB 时序存储的新个性及最佳实际。 主讲人:郑如鹏 MongoDB 资深解决方案架构师 工夫:2022年7月6日 星期三 14:00-15:00 模式:在线直播 费用:收费 扫描下方二维码注册参会并填写调研问题 将有机会取得精美定制礼品! 可复制链接到浏览器即可报名: https://live.polyv.cn/watch/3... 可关注上文公众号(Mongoing中文社区)即可报名。 社区招募 为了让社区组委会成员和志愿者敌人们灵便参加,同时咱们为想要深度参加社区建设的搭档们开设了“招募通道”,如果您想要在社区外面结交气味相投的技术搭档,想要通过在社区积淀有价值的干货内容,想要一个展现本人的舞台,晋升本身的技术影响力,即刻退出社区奉献队伍~ 点击链接提交申请:http://mongoingmongoing.mikec... 社区单干 接下来咱们会在诸多城市举办技术大会,如果您有优质的议题和 MongoDB 相干教训的嘉宾能够与咱们分享,或者有资助合作意向的小伙伴,蕴含但不限度于联结主办方、媒体单干等,都能够随时分割咱们的社区助手小芒果(微信ID:mongoingcom)沟通具体事宜。

June 23, 2022 · 1 min · jiezi

关于mongodb:直播分享-腾讯云-MongoDB-智能诊断及性能优化实践

本次直播分享次要分为五个局部开展: 第一局部:次要介绍 MongoDB 的外围劣势; 第二局部:次要总结云上 MongoDB 用户常见的一些问题; 第三局部:介绍腾讯云 MongoDB 智能索引举荐实现流程及其实现原理; 第四局部:介绍腾讯云 MongoDB 内核 SQL 限流性能及其实现; 第五局部:次要分享腾讯云 DBbrain for MongoDB 的两个典型诊断案例 MongoDB 有哪些外围劣势?MongoDB 是一个基于分布式文件存储的数据库,由 C++ 语言编写。首先,咱们来看下它有哪些外围劣势,上面列举几个: 分布式 MongoDB 是开源的分布式数据库,能够解决传统数据库存储容量上的瓶颈问题,用户不用再提前思考分库分表等操作。同时,MongoDB 也是一个人造高可用的数据库,比方在一主两从的工作模式下,当主节点意外宕机,从节点就会接替主节点的工作,整个过程毋庸依赖任何第三方组件。 lschema-free MongoDB 的表构造绝对自在,增加字段方便快捷,相比于传统数据库在一张大表里增加字段,运维老本被大大降低。 高性能 MongoDB 晚期应用 MMAPv1 存储引擎,起初替换为 WiredTiger 存储引擎,它反对行级粒度锁、热点数据缓存等个性,这给 MongoDB 带来了高性能、低提早、高吞吐等能力。 高压缩比 在默认配置下,MongoDB 应用 snappy 压缩算法,可达到均匀2到4倍的文本数据压缩能力,如果应用 zlib 压缩算法则能够晋升到3至7倍,然而 zlib 对性能有肯定影响,因而线上通常应用默认配置即可。经测试,在默认配置的状况下,同样一份数据写入 MongoDB、MySQL、ES 的实在磁盘耗费比约为1 : 3 : 6。 欠缺的客户端拜访策略 MongoDB 反对五种平衡拜访策略: primary:读主节点,当主节点异样时,可能造成短期内的业务异样。 primaryPreferred:主节点优先,当主节点异样时能够读从节点。 secondary:读从节点,把流量平平衡调配给多个从节点,实现负载平衡。 secondaryPreferred:从节点优先,如果从节点异样,则读取主节点。 nearest:就近拜访,在多机房场景下,就近拜访能够避免出现跨机房拜访的状况。 腾讯云 MongoDB 外围劣势 腾讯云 MongoDB 以后已服务于游戏、电商、社交、教育、新闻资讯、金融、物联网、软件服务、汽车出行、音视频等多个行业。 ...

June 23, 2022 · 3 min · jiezi

关于mongodb:MongoDB的安装与连接

MongoDB简介MongoDB是一种以文档的模式存储的NoSQL数据库。MongoDB分付费版和收费版本,云服务版本Atlas和企业高级版本是须要付费的。MongoDB社区版本是开源的,开源代码仓库地址是:https://github.com/mongodb/mongo MongoDB次要分为以下三个局部: mongod - 数据库服务mongos - 分片路由mongo - 命令行客户端MongoDB的装置Homebrew装置如果你用的是MacOS零碎,一种可用的形式是应用Homebrew软件管理系统进行装置。brew命令的应用及参数阐明如下: $ brew --helpExample usage: brew search [TEXT|/REGEX/] brew info [FORMULA...] brew install FORMULA... brew update brew upgrade [FORMULA...] brew uninstall FORMULA... brew list [FORMULA...]Troubleshooting: brew config brew doctor brew install --verbose --debug FORMULAContributing: brew create [URL [--no-fetch]] brew edit [FORMULA...]Further help: brew commands brew help [COMMAND] man brew https://docs.brew.sh装置前最好应用如下命令先更新一下软件包仓库。 brew update如果想要装置的是包管理器中的默认版本,应用如下的命令装置即可。 brew install mongodb如果你不晓得有哪些版本的MongoDB可用,能够应用安装包搜寻命令行搜寻一下Homebrew反对的版本,并抉择相应的版本进行装置。 brew search mongodb如果你不分明之前你有没有装置过,或者装置的是哪个版本,能够应用如下命令进行查问。 brew info mongodb源代码编译装置如果用的不是惯例的Linux、MacOS、Windows等操作系统。你可下载MongoDB的源代码进行构建后装置与运行。具体的构建过程能够参考如下链接:https://github.com/mongodb/mongo/blob/master/docs/building.md ...

June 19, 2022 · 6 min · jiezi

关于mongodb:MongoDB-新手入门-Aggregation

本文是 MongoDB 新手入门 系列的第二篇,在本文中,咱们将会解说 MongoDB 的聚合框架,在看完本文后,读者能够把握应用 MongoDB 进行罕用的数据统计分析办法。 本文将会继续修改和更新,最新内容请参考我的 GITHUB 上的 程序猿成长打算 我的项目,欢送 Star,更多精彩内容请 follow me。 简介 聚合管道(Aggregation Pipelines)中蕴含一个或多个用于解决文档的步骤(stages): 每一个步骤(stage)都会对输出的文档执行某个操作,例如,$match 步骤能够用于筛选文档,$group 步骤能够对文档进行分组并且计算字段的平均值每个步骤的输入文档将会作为下一个步骤的输出文档所有步骤执行实现后,聚合管道会返回文档解决后的后果,比方返回以后值,平均值,最大值和最小值等MongoDB 4.2 开始,能够应用聚合管道来更新文档了。聚合管道的语法为 db.collection.aggregate( [ { <stage> }, ... ] )为了演示聚合管道的性能,咱们当初 MongoDB 中创立一个 orders 汇合,插入以下数据 db.orders.insertMany( [ { _id: 0, name: "Pepperoni", size: "small", price: 19, quantity: 10, date: ISODate( "2021-03-13T08:14:30Z" ) }, { _id: 1, name: "Pepperoni", size: "medium", price: 20, quantity: 20, date : ISODate( "2021-03-13T09:13:24Z" ) }, { _id: 2, name: "Pepperoni", size: "large", price: 21, quantity: 30, date : ISODate( "2021-03-17T09:22:12Z" ) }, { _id: 3, name: "Cheese", size: "small", price: 12, quantity: 15, date : ISODate( "2021-03-13T11:21:39.736Z" ) }, { _id: 4, name: "Cheese", size: "medium", price: 13, quantity:50, date : ISODate( "2022-01-12T21:23:13.331Z" ) }, { _id: 5, name: "Cheese", size: "large", price: 14, quantity: 10, date : ISODate( "2022-01-12T05:08:13Z" ) }, { _id: 6, name: "Vegan", size: "small", price: 17, quantity: 10, date : ISODate( "2021-01-13T05:08:13Z" ) }, { _id: 7, name: "Vegan", size: "medium", price: 18, quantity: 10, date : ISODate( "2021-01-13T05:10:13Z" ) }] )上面的示例会计算两个日期之间每天的的披萨订单总价值和均匀数量 ...

May 30, 2022 · 14 min · jiezi

关于mongodb:MongoDB-新手入门-CRUD

本文是 MongoDB 新手入门 系列的第一篇,在本文中,咱们将会解说 MongoDB 根本的增删改查操作,在学习完本文后,读者将会把握对 MongoDB 的汇合文档进行根本的新增,批改,删除以及基于多种条件的查问操作。 本文将会继续修改和更新,最新内容请参考我的 GITHUB 上的 程序猿成长打算 我的项目,欢送 Star,更多精彩内容请 follow me。 插入文档在 MongoDB shell 中,插入文档有以下两个办法: 应用 db.collection.insertOne() 插入单个文档应用 db.collection.insertMany() 插入多个文档在插入文档时,如果 collection 不存在,插入操作将会主动创立 collection。如果文档没有 _id 字段, MongoDB 将会主动增加一个 _id 字段,类型为 ObjectId。 在 MongoDB 中,每一个文档都须要一个惟一的 _id 字段作为主键,如果插入时没有指定 _id 字段,MongoDB 驱动将会主动生成一个类型为 ObjectId 的 _id 字段。 ObjectId 是一种可能疾速生成的,有序的,12 字节大小的惟一值,蕴含: 一个 4 字节的工夫戳,代表了 ObjectId 的创立工夫,取值为 Unix 工夫戳(秒)一个 5 字节的随机值,该值每个过程都只会生成一次,对每台服务器和过程来说该值是惟一的一个 3 字节的自增值,初始为一个随机数use sample_mflix// 插入单个文档db.movies.insertOne( { title: "The Favourite", genres: [ "Drama", "History" ], runtime: 121, rated: "R", year: 2018, directors: [ "Yorgos Lanthimos" ], cast: [ "Olivia Colman", "Emma Stone", "Rachel Weisz" ], type: "movie" })// 插入多个文档db.movies.insertMany([ { title: "Jurassic World: Fallen Kingdom", genres: [ "Action", "Sci-Fi" ], runtime: 130, rated: "PG-13", year: 2018, directors: [ "J. A. Bayona" ], cast: [ "Chris Pratt", "Bryce Dallas Howard", "Rafe Spall" ], type: "movie" }, { title: "Tag", genres: [ "Comedy", "Action" ], runtime: 105, rated: "R", year: 2018, directors: [ "Jeff Tomsic" ], cast: [ "Annabelle Wallis", "Jeremy Renner", "Jon Hamm" ], type: "movie" }])除了罕用的 insertOne 和 insertMany 办法之外,还能够用以下形式插入文档 ...

May 30, 2022 · 6 min · jiezi

关于mongodb:技术干货-MongoDB时间序列集合

名词解释Glossarybucket:带有雷同的元数据且在一段有限度的间 隔区间内的测量值组。 bucket collection :用于存储时序型汇合的底层的分组桶的零碎汇合。复制、分片和索引都是在桶级别上实现的。 measurement:带有特定工夫序列的K-V汇合。 meta-data:时序序列里很少随工夫变动的K-V对,同时能够用于辨认整个时序序列。 time-series:一段距离内的一系列测量值。 time-series collection:一种示意可写的非物化的视图的汇合类型,它容许存储和查问多个工夫序列,每个序列能够有不同的元数据。 MongoDB 在5.0中反对了新的timeseries collection类型的选项,该类型用于存储时序型数据。timeseries collection提供了一组用于插入和查问测量值的简略接口,同时底层理论的数据是存储在以bucket模式的汇合中。 在创立timeseries collection时,timeField字段是最小必备的配置项。metaField是另一个可选的、可被指定的元数据字段,它是用于在bucket中对测量值分组的根据。MongoDB通过提供expireAfterSeconds字段选项,也反对了对测量值的过期机制。 在mydb数据库中有个以mytscoll 命名的timeseries collection,该汇合在MongoDB外部的catelog(用于存储汇合或视图的信息)里是由一个视图和一个零碎汇合组成的。 mydb.mytscoll 是个视图,它在MongoDB底层是用bucket collection作为蕴含特定属性的原始汇合实现的: 该视图就是通过aggregation里的$_internalUnpackBucket来实现开展bucket里数据的。 该视图是可写的(仅反对插入)。同时每个被插入的文档必须蕴含工夫字段。 在查问视图时,它会隐式地开展底层在bucket collection中存储的数据,而后返回原始的非bucket模式的文档数据。 该零碎汇合的命名空间是mydb.system.buckets.mytscoll,它是用来存储理论数据的。 每一个在bucket collection里的文档,都示意了一组区间距离的时序型数据。 如果在创立timeseries collection时,定义了metaField元数据字段,那么所有在bucket里的测量值都会有这个通用的元数据字段。 除了工夫范畴,bucket还限度了每个文档数据的总条数以及测量值的大小。 Bucket Collection Schema { _id: <Object ID with time component equal to control.min.<time field>>, control: { // <Some statistics on the measurements such min/max values of data fields> version: 1, // Version of bucket schema. Currently fixed at 1 since this is the // first iteration of time-series collections. min: { <time field>: <time of first measurement in this bucket, rounded down based on granularity>, <field0>: <minimum value of 'field0' across all measurements>, <field1>: <maximum value of 'field1' across all measurements>, ... }, max: { <time field>: <time of last measurement in this bucket>, <field0>: <maximum value of 'field0' across all measurements>, <field1>: <maximum value of 'field1' across all measurements>, ... }, closed: <bool> // Optional, signals the database that this document will not receive any // additional measurements. }, meta: <meta-data field (if specified at creation) value common to all measurements in this bucket>, data: { <time field>: { '0', <time of first measurement>, '1', <time of second measurement>, ... '<n-1>': <time of n-th measurement>, }, <field0>: { '0', <value of 'field0' in first measurement>, '1', <value of 'field0' in first measurement>, ... }, <field1>: { '0', <value of 'field1' in first measurement>, '1', <value of 'field1' in first measurement>, ... }, ... }}索引indexes为了保障timeseries collection的查问能够受害于索引扫描而不是全表扫描,timeseries collection容许索引能够被创立在工夫上,元数据上以及元数据的子属性上。从MongoDB5.2开始,在timeseries collection也容许索引被创立在测量值上。用户应用createIndex命令提供的索引标准被转换为底层buckets collection的模式。 ...

May 12, 2022 · 2 min · jiezi

关于mongodb:MongoDB-入门教程系列之三使用-Restful-API-操作-MongoDB

本教程的前两篇文章,别离介绍了如何应用 Node.js,一般的 Java 利用以及 SpringBoot 利用对 MongoDB 进行读写访问。 MongoDB 入门教程系列之一:开发环境搭建以及 Node.js 和 Java 的读写访问MongoDB 入门教程系列之二:应用 Spring Boot 操作 MongoDB本文介绍另一种采取 Restful API 的形式来操纵 MongoDB. 应用 SpringBoot 开发 Restful API 对 MongoDB 进行读写访问通过 Spring Boot 结构出 Restful API,这样能够间接在浏览器里通过调用 Restful API,对 MongoDB 进行增删查改了。 先看依照本教程介绍的步骤,实现的最终成果。 假如我本地 MongoDB 的数据库里有一张表 book,只有一条记录,id 为 1. 通过浏览器里的这个 url 依据 id 读取该记录:http://localhost:8089/bookman... 采取如下 url 进行记录的创立: http://localhost:8089/bookman... 记录搜寻操作的 url:http://localhost:8089/bookman...* 记录的删除:删除 id 为 2 的记录 http://localhost:8089/bookman... ...

May 11, 2022 · 2 min · jiezi

关于mongodb:技术干货-MongoDB如何查询Null或不存在的字段

在MongoDB中不同的查问操作符对于null值解决形式不同。 本文提供了应用mongo shell中的db.collection.find() 办法查问null值的操作案例。案例中应用的inventory汇合数据能够通过上面的语句产生。 db.inventory.insertMany([ { _id: 1, item: null }, { _id: 2 }])等值匹配当应用{item:null}作为查问条件的时候,返回的是item字段值为null的文档或者不蕴含item字段的文档。 db.inventory.find( { item: null } ) 该查问返回inventory汇合中的所有文档。 类型查看当应用{item:{$type:10}}作为查问条件的时候,仅返回item字段值为null的文档。item字段的值是BSON TYPE NULL(type number 10)。 db.inventory.find( { item : { $type: 10 } } ) 该查问仅返回item字段值为null的文档。 存在查看当应用{item:{$exists:false}}作为查问条件的时候,返回不蕴含item字段的文档。 db.inventory.find( { item : { $exists: false } } ) 该查问仅返回不蕴含item字段的文档。 相干文档$type $exists 原文链接: https://www.mongodb.com/docs/... 对于作者:张芷嘉MongoDB中文用户文档·CRUD操作章节负责人 喜爱跑步,做饭,睡觉,出门三公里就困。应用MongoDB两年,倍感丝滑。 社区招募 为了让社区组委会成员和志愿者敌人们灵便参加,同时咱们为想要深度参加社区建设的搭档们开设了“招募通道”,如果您想要在社区外面结交气味相投的技术搭档,想要通过在社区积淀有价值的干货内容,想要一个展现本人的舞台,晋升本身的技术影响力,即刻退出社区奉献队伍~ 点击链接提交申请:http://mongoingmongoing.mikec...

May 7, 2022 · 1 min · jiezi

关于mongodb:解决方案-阿里云数据库MongoDB版助力餐道显著提升运维效率打造卓越餐饮零售服务

客户简介餐道信息科技有限公司成立于2014年,总部位于广州,在北京、上海、香港等地设有办公地点,深圳、成都、无锡、青岛等地设有经营核心。公司作为国内最早一批涉足餐饮SaaS零碎的企业,领有20年的餐饮零碎实战研发教训,致力于为国内餐饮新批发企业提供订单管理系统、CDBI、自有骑手配送管理系统、聚合配送解决方案、生态服务商利用的治理、全渠道代经营等一体化的O2O解决方案。 服务于国内外连锁品牌超过4200个,笼罩了全国400多个城市的80000多家门店,包含麦当劳、汉堡王、DQ、棒约翰、COSTA、吉野家、西贝、老乡鸡、周黑鸭、一点点、真功夫、望湘园、鹿港小镇等泛滥出名连锁餐饮团体,以及京东便利店、壳牌便利店、城市菜园等新批发企业提供服务。同时与泛滥出名外卖平台、物流配送公司、第三方公司达成策略单干,帮忙泛滥客户经营效率晋升30%以上。 业务挑战餐饮场景存在各种菜系以及菜品,并且食客抉择灵便多变,数据结构要反对灵便变更; 随着餐道产品的遍及和规模的扩充,开发团队须要破费更多的工夫在保护和治理上,这意味着开发人员须要付出更多的人力能力保障及时交付业务相干开发; 自建自管的数据库也使得集群规格的抉择和磁盘的扩容变得艰难和耗时。这也意味着一旦呈现问题,可能须要很长时间能力解决,对业务影响比拟大; 没有管理软件,集群的性能问题定位艰难,操作繁琐,业务长时间受影响。 解决方案MongoDB灵便的模型可将食客点餐数据保留在繁多汇合中,数据结构灵便更新; 阿里云数据库MongoDB版开箱即用,罢黜运维懊恼,反对业务疾速倒退; 阿里云数据库MongoDB版规格和磁盘反对平滑弹性扩容,疾速应答业务变动; 阿里云数据库MongoDB版通过秒级监控和CloudDBA能够疾速诊断异样,疾速复原业务; 阿里云数据库MongoDB版实时备份反对任意工夫点复原,并有欠缺的审计日志,保障合规。 (业务架构图) (部署架构图) 客户价值阿里云数据库MongoDB版的丰盛产品能力帮忙客户升高运维老本的同时运维效率晋升了3倍; 阿里云数据库MongoDB版数据反对实时备份并有残缺的审计日志,大幅晋升了产品数据安全等级,客户更自信,产品更牢靠; 阿里云数据库MongoDB版具备图形化监控和CloudDBA能力,能够及时洞察数据库性能,轻松定位解决问题,缩小客户投诉,晋升客户满意度,晋升客户价值。 “因为应用了阿里云数据库MongoDB版,大幅度晋升了咱们的运维效率,让咱们能够更专一于业务倒退。” —— 林良,餐道信息科技有限公司CTO 社区招募为了让社区组委会成员和志愿者敌人们灵便参加,同时咱们为想要深度参加社区建设的搭档们开设了“招募通道”,如果您想要在社区外面结交气味相投的技术搭档,想要通过在社区积淀有价值的干货内容,想要一个展现本人的舞台,晋升本身的技术影响力,即刻退出社区奉献队伍~ 点击链接提交申请:http://mongoingmongoing.mikec...

May 7, 2022 · 1 min · jiezi

关于mongodb:行业案例-MongoDB在腾讯零售优码中的应用

本文次要分享腾讯智慧批发团队优码业务在MongoDB中的利用,采纳腾讯云MongoDB作为主存储服务给业务带来了较大收益,次要包含:高性能、快捷的DDL操作、低存储老本、超大存储容量等收益,极大的升高了业务存储老本,并进步了业务迭代开发效率。 一. 业务场景腾讯优码从连贯消费者到连贯渠道终端,实现以货的数字化为根底的企业数字化降级,蕴含营销能力降级和动销能力降级。腾讯优码由副品通、门店通和会员通三个子产品组成。 腾讯优码整体视图 1.1 副品通 腾讯优码副品通提供防伪鉴真能力,实现一物一码全流程副品追溯,全链路数据存储至区块链,确保真实可信;更可中转品牌私域,实现流量进一步转化;同时副品通提供微信域内的品牌爱护能力,阻断品牌伪冒网站流传、帮忙消费者辨认混充商品。 产品次要蕴含如下外围个性: 1.2 门店通 腾讯优码门店通是服务品牌方、经销商、业代员以及终端门店四大批发链路外围角色实现基于终端销售门店的销售管理手段降级与销售额晋升。 产品次要蕴含如下外围个性: 1.3 会员通 腾讯优码会员通是面向批发品牌商提供的SaaS+定制化服务的产品,以扫码为切入点,连接线上线下场景。提供丰盛的扫码/互动流动模型、流动评估体系助力品牌连贯消费者。 产品次要蕴含如下外围个性: 二.码存储选型腾讯智慧批发优码业务存储批发商品二维码信息,该信息为智慧批发最外围的数据信息,提供“从连贯消费者到连贯渠道终端,实现以货的数字化为根底的企业数字化降级”相干服务。因而码数据存储问题是我的项目最外围的问题。 2.1 需要和计划 要解决码存储问题,首先须要剖析码存储的特色。通过剖析码存储问题的次要特色是: 海量数据:腾讯优码做的商品二维码,随着越来越多的商品应用腾讯优码业务,二维码数据开始出现指数级增长。 关联存储:码与码之间存在1:1和1:N:N的关联关系,须要存储这种关系,并且提供相应的关联查问。 多维度查问:针对不同的利用场景须要提供不同维度的条件查问。 在获取到码存储特色之后,通过多方调研和排查之后,初步选取了2种存储计划: MySQL + ES:MySQL 分库分表存储码元数据,提供须要高性能的读写场景;而后依据需要将局部数据同步 ES 以应答各种简单的查问场景。MongoDB:MongoDB 是全球排名最高的分布式NoSQL数据库,其外围个性是 No Schema、高可用和分布式,非常适合分布式存储。2.2 计划剖析 2.2.1 MySQL + ES计划剖析 MySQL + ES 是一个比拟常见的存储解决方案,并且在很多畛域内被广泛应用,如会员或商品信息贮存畛域。此计划的劣势是可能提供十分多的查问形式和不同的性能保障,能够应答各种各样简单的业务查问需要。 MySQL + ES 的常见架构是写操作间接作用于MySQL,而后通过 canal + Kafka 的形式将数据变更同步到ES,而后再依据不同的查问场景从MySQL或者ES查问数据。下图是在腾讯优码业务场景下可能的架构图: 从架构图能够看出,本计划存在几个问题: 数据同步和一致性问题:这个问题在数据量不大的状况下不会有影响。然而如果数据量百亿甚至千亿时就是一个十分重大的问题。 数据容量问题:个别状况下 MySql 的单表数据最好维持在百万级一下,如果单表数据量过大之后读写都是个问题。那么如果要存储千亿数据就要几千上万张表,如此多的分表须要业务本人保护时开发运维都是简直不可行的。 老本问题:数据冗余存储,会减少额定的存储老本。同时ES 为了保证数据可靠性和查问性能,须要更多的机器和内存。而且 ES 存在数据收缩问题,对于同样的数据,须要相当MySql来说更大的磁盘。 DDL运维问题:MySql 在分库散布之后,因为DDL语句须要操作大量的库表,因而十分耗时,同时也容易出错。依据咱们以前的我的项目教训来说,当有几百张表,单表几十万数据时,一个简略的减少字段的DDL语句也须要1小时甚至更久能力实现。 开发成本问题:此计划须要业务本人保护分库分表、数据同步和依据需要选取不同的查问引擎。不仅整个架构简单,同时在做业务需要时须要慎重考虑,稍不留神应用错的存储引擎就可能导致性能问题。 程度扩容问题:MySql 分库分表要扩容须要业务手动 rehash 搬迁数据,老本十分高,而且很难解决扩容过程中的数据读写问题。 ...

May 7, 2022 · 1 min · jiezi

关于mongodb:限时好礼-MongoDB又有新书籍出炉啦

同学们,最新的MongoDB书籍《MongoDB外围原理与实际》出炉啦!本书是MongoDB中文社区长沙分会主席郭远威老师第二本对于MongoDB的佳作,凝聚了郭老师多年潜心研究成绩和心得。还失去了MongoDB 官网、中文社区核心成员、社区志愿者的帮忙,与大家一次次交换研究中取得了灵感、积攒了常识。为了感激社区小伙伴始终以来的关注与反对,特此为社区小伙伴们发送福利! 福利来啦!咱们将会在本文评论下方抽取点赞前三名的评论各赠送1本《MongoDB外围原理与实际》!评论4月22日周五早晨18点完结敞开,19点在公众号底部颁布侥幸用户! 作者在撰写本书的过程中,始终站在读者视角,对每章节的内容及程序重复打磨,因为MongoDB 的版本及新性能更新较快,有些章节甚至须要在写完后推倒从新编写。之所以这么做,其目标就是尽量确保书中的每一个知识点都是最新且正确的,以让读者知其然并知其所以然,从书中吸取养分。本书全部内容以 MongoDB 4.2版本为根底进行撰写。 作为寰球热门的NoSQL数据库MongoDB是本书钻研的次要对象MongoDB原生具备的分片集群个性保障了数据存储空间的易横向扩大,复制集及多正本主动选举个性保障了数据库的高可用性,可嵌套的文档个性保障了表构造自在定义。围绕这些外围个性, MongoDB还提供了一些可视化、流变更捕捉、管道汇集及分布式文件系统等性能或工具,极大中央便了数据工程师进行海量数据的储算剖析。 深刻分析MongoDB数据库帮忙读者解决各种案例场景MongoDB作为一种分布式数据库,人造具备三高个性:高可用、高性能、高扩大,本书秉着“实际为主、实践为辅”准则,详尽论述了复制集和分片集群的前因后果,读者读完后肯定能对分布式系统外面数据一致性、数据同步、数据分片、申请路由、负载平衡、故障主动复原、分布式事务等实践有更加粗浅的了解。 基于MongoDB数据库使读者恍然大悟、一览众山小本书介绍了基于MongoDB的经典案例,如数据中台、百万级高并发集群优化、金融零碎、云原生MongoDB等内容,读者能够参考并使用到理论我的项目布局、架构选型、我的项目落地等业务场景中。本书的内容依照循序渐进、由浅入深的准则组织,共分为4篇。第1篇:MongoDB基础知识 第2篇:深刻了解MongoDB 第3篇:MongoDB运维治理 第4篇:MongoDB利用实际 本书特色根底夯实:残缺论述了生产级数据库应该具备的根底性能。实践分析:本书是一本零碎且全面介绍存储引擎的图书,使读者能知其然并知其所以然。实际摸索:本书蕴含外围开发代码和部署实际,使读者能够间接参考并使用到理论我的项目中。案例丰盛:通过大型企业的落地案例及宽广 Mongo 爱好者提出的问题剖析,读者能够间接从中获取贵重的教训。内容全面:本书能够作为一本参考手册,读者须要时能够疾速查找相应常识。 读者对象零碎开发人员:能够间接将 MongoDB 作为生产数据库应用。数据库运维人员:能够参考书中大量的运维工具和性能调优案例。大数据架构师,能够参考书中的部署架构并使用到理论我的项目中。大数据分析师,能够参考书中汇集计算框架进行大数据分析。大数据计划布局人员:能够联合书中的案例和理论知识进行落地计划布局。数据库实践钻研人员:能够参考书中存储引擎的底层剖析,学习大部分数据库实践。 福利送不停~理解到同学们喜爱利用本人善于的编程语言进行利用程序开发,本书也思考到了这一点,介绍了如何基于几种支流编程语言驱动的开发,每段代码都来源于实战我的项目,十分便于读者学习和应用。对于零根底同学能够作为疾速入门教程,同时书中高阶内容也适宜高级专家充电。 当初购买《MongoDB外围原理与实际》可享满100减50优惠券!限时优惠,先到先得! 扫描上方“二维码”即刻购买 对于作者:郭远威MongoDB中文社区长沙分会主席&专栏作者;资深大数据架构师;阿里云云计算ACP专家;《大数据存储MongoDB实战指南》《MongoDB外围原理与实际》作者;通信行业业务架构与数据迁徙专家,先后在华为,中兴工作十余年;曾负责施行了海内多个运营商的大数据迁徙及BI等大数据系统的设计开发。 社区招募为了让社区组委会成员和志愿者敌人们灵便参加,同时咱们为想要深度参加社区建设的搭档们开设了“招募通道”,如果您想要在社区外面结交气味相投的技术搭档,想要通过在社区积淀有价值的干货内容,想要一个展现本人的舞台,晋升本身的技术影响力,即刻退出社区奉献队伍~ 点击链接提交申请:http://mongoingmongoing.mikec...

April 20, 2022 · 1 min · jiezi

关于mongodb:技术干货-如何在MongoDB中轻松使用GridFS

GridFS是用于存储和检索超过16 MB大小限度的BSON文档文件的标准。 留神 GridFS 不反对多文档事务 相较于将一个文件存储在单条文档中,GridFS将文件分为多个局部或块[1],并将每个块存储为独自的文档。默认状况下,GridFS应用的块默认大小为255kB;也就是说,除最初一个块,GridFS会将文件划分为255 kB的块。最初一个块只有必要的大小。同样,最初的那个块也不会大于默认的块大小,仅应用所需的空间以及一些其余元数据。 GridFS应用两个汇合来存储文件。一个汇合存储文件块,另一个汇合存储文件元数据。 GridFS汇合一节具体介绍了每个汇合。 当你从GridFS查问文件时,驱动程序将依据须要从新组装该文件所有的块。你能够对GridFS存储的文件进行范畴查问。你还能够从文件的任意局部拜访其信息,例如“跳到”视频或音频文件的两头。 GridFS不仅可用于存储超过16 MB的文件,而且还可用于存储您要拜访的任何文件而不用将整个文件加载到内存中。另请参阅何时应用GridFS。 什么时候应用GridFS在MongoDB中,应用GridFS存储大于16 MB的文件。 在某些状况下,在MongoDB数据库中存储大型文件可能比在零碎级文件系统上存储效率更高。 如果文件系统限度了目录中文件的数量,则能够应用GridFS来存储所需数量的文件。 当你要拜访大文件局部的信息而不用将整个文件加载到内存中时,能够应用GridFS来调用文件的某些局部,而无需将整个文件读入内存。 当你心愿放弃文件和元数据在多个零碎和设施之间主动同步和部署时,能够应用GridFS。应用地理分布的复制集时,MongoDB能够主动将文件及其元数据散发到多个mongod实例和设施。 如果您须要对整个文件的内容进行原子更新,请不要应用GridFS。或者,您能够存储每个文件的多个版本,并在元数据中指定文件的以后版本。上传文件的新版本后,您能够原子更新元数据中批示为“最新”状态的字段,而后在须要时删除以前的版本。 此外,如果文件均小于16 MB BSON文档大小限度,请思考将每个文件存储在单个文档中,而不是应用GridFS。您能够应用BinData数据类型存储二进制数据。无关应用BinData的详细信息,请参见驱动程序文档。 应用GridFS要应用GridFS存储和检索文件,请应用以下任一办法: MongoDB驱动程序。请参阅驱动程序文档,以获取无关将GridFS与驱动程序一起应用的信息。 mongofiles命令行工具。无关文档,请参见mongofiles参考。 GridFS CollectionsGridFS将文件存储在两个汇合中: 块存储二进制块。无关详细信息,请参见chunks汇合。 文件存储文件的元数据。无关详细信息,请参见文件汇合。 GridFS通过应用存储桶名称为每个汇合增加前缀,将汇合搁置在一个公共存储桶中。默认状况下,GridFS应用两个汇合以及一个名为fs的存储桶: fs.files fs.chunks 您能够抉择其余存储桶名称,也能够在一个数据库中创立多个存储桶。残缺汇合名称(包含存储桶名称)受命名空间长度限度。 块汇合 块[1]汇合中的每个文档都代表了GridFS中示意的文件的不同的块。此汇合中的文档具备以下格局: { "_id" : <ObjectId>, "files_id" : <ObjectId>, "n" : <num>, "data" : <binary>}chunks汇合中的文档蕴含以下字段: chunks._id 块的惟一ObjectId。 chunks.files_id 在files汇合中指定的“父”文档的_id。 chunks.n 块的序列号。GridFS从0开始对所有块进行编号。 chunks.data 块BSON二进制类型的荷载。 文件汇合 文件汇合中的每个文档代表GridFS中的一个文件。 { "_id" : <ObjectId>, "length" : <num>, "chunkSize" : <num>, "uploadDate" : <timestamp>, "md5" : <hash>, "filename" : <string>, "contentType" : <string>, "aliases" : <string array>, "metadata" : <any>,}files汇合中的文档蕴含以下一些或全副字段: ...

April 14, 2022 · 1 min · jiezi

关于mongodb:Tapdata-PDK-生态共建计划启动MongoDBDorisOceanBasePolarDB等十余家厂商首批加入

2022年4月7日,Tapdata 正式启动 PDK 插件生态共建打算,致力于全面连贯数据孤岛,减速构建更加凋谢的数据生态,以期让各行各业的使用者都能开释数据的价值,随时获取陈腐的数据。截至目前,已有超10家数据库畛域生机代表,作为首批生态共建搭档退出: 作为 Tapdata 生态的一员,Aerospike 正在依附 Tapdata 平台,借助联结解决方案为所有上下游数据驱动业务提供亚毫秒级性能的实时,残缺,寰球散布的,强一致性存储能力的企业数据。咱们与 Tapdata 单干在生态建设方面有更多的兼容性,大家一起成长倒退,为客户提供更多更好的实时数据计划。——Aerospike 爱可生将提供更丰盛的开源分布式数据库的治理平台产品和服务能力,作为生态合作伙伴与 Tapdata 更好地为企业提供优质高效的数据库技术服务。——爱可生 Tapdata 作为国内当先的异构数据实时同步平台,非常高兴 Apache Doris 能够与 Tapdata 强强联手,通过 Tapdata 弱小的实时数据同步能力,突破数据孤岛、为用户提供高效和对立的数据利用及剖析平台,共建下一代数据架构。——Apache Doris 作为开源畛域分布式数据库的优良代表 Cassandra 背地的商业化公司,DataStax 中国非常高兴加入 Tapdata 的 PDK 数据源插件共建打算,让数据实时流动起来,施展数据的最大价值。——DataStax 南大通用 GBase 系列数据库产品已广泛应用于金融、电信、政务、能源、交通、平安等要害畛域。此次携手 Tapdata 参加 PDK 数据源插件共建打算,通过构建弱小的数据整合工具,实现数据实时同步,突破数据孤岛,独特成为客户数据最松软的后盾。——GBase 热璞 HotDB 分布式关系型数据库产品和关系型云数据库产品,目前已大规模利用于各大行业的外围生产零碎。热璞深知数据实时流动对客户的重要价值,愿携手 Tapdata 参加 PDK 数据源插件共建打算,开释客户数据价值。——HotDB 极数云舟 DTark 多维数据交融计算的理念和 Tapdata Data on Tap 的愿景不约而同,通过构建弱小的数据整合工具实现数据实时流动和多样化数据服务,心愿参加 PDK 数据源插件共建打算,让数据架构更简略。——极数云舟 多源数据交互是古代企业的强需要,Tapdata 凭借数据即服务的先进架构,为用户的数据 & 业务交融带来极大的便当。KunlunDB 期待与 Tapdata 共建生态,为用户提供一个弱小、便捷的分布式数据服务平台。——KunlunDB MongoDB 由开发者专为开发者设计,它提供一个跨地区、跨云和部署类型的利用数据平台,帮忙开发者解决事务性工作负载和古代应用程序面临的数据挑战。MongoDB 愿与 Tapdata 一直深入与扩充单干,为用户提供高效和对立的数据利用及剖析平台,共建下一代数据架构。——MongoDB ...

April 11, 2022 · 2 min · jiezi

关于mongodb:M1芯片-MacOS系统如何完成MongoDB的相关配置

装置到电脑上这种废话就不说了,官网下载。 我的装置门路是抉择了电脑的根门路. 一.接下来就是配置运行环境留神这里十分须要重要你须要弄清楚你应用的终端shell是zsh 还是bash,mac自带默认的是bash,如果你是bash。在终端输出cd ~返回到根目录。而后这里有两种状况,一个是你没有.bash_profile,你须要在终端顺次输出touch .bash_profile这是创立配置环境文件,紧接着输出open .bash_profile 这里须要留神的是如果你的门路放在了其它中央,那么{PATH}:前面就须要填写你理论的地址,不过咱们个别倡议放在根目录下.并且肯定要进入到mongodb的bin目录下的门路 而后control+s保留。再而后在终端输出source .bash_profile这个意思是每次你关上终端它就会默认进入到mongodb/bin目录下,其实当你关上终端的时候,它曾经无形之中进入了电脑很多文件的bin目录下期待你的输出,cd/open/ls等等这些都是曾经筹备好了的。如果你不source,就无事产生。 如果你将bash替换成了zhs那么在终端中输出open -e .zshrc这是什么意思呢?e的意思是edit编辑的意思,没有e是无奈编辑的。而后到文件的最初一行输出以下代码:export PATH=/usr/local/mongodb/bin:$PATH同理保留 而后终端输出source .zshrc这时候你输出mongod -version 如果能够看到正确显示,那么阐明启动环境曾经配置好了。 **这里容易出错的中央就是很多人不晓得bash和zsh是干什么的,网上也没有具体的配置环境的教程。这里额定提一下这,不业余的说,关上mongodb的bin目录 你目前就了解为,你关上终端,关上.zshrc文件并且设置配置环境当前,这四个货色就进到你的终端里随时待命了,不然你每次关上都须要从不同文件夹的不同bin目录里本人缓缓关上这些命令。终端帮你把这些命令都收集起来让你只在一个显示的中央去疾速寻找。而bash和zsh实现的性能是一样的。只不过各种有各自的配置文件罢了。 二.配置一下data寄存地位和日志log的寄存地位创立两个文件夹 data 和log 而后容许这两个文件进行读写 而后cd 进入到mogodb的文件夹下,不须要进入bin目录里,输出 --fork 的意思是不须要在控制台输入一些启动的过程,--dapath data是指定数据存储地位,--logpath代表日志向哪里输入 logapprend意思是日志是增加到上一个日志的前面,而不是刷新日志(这里须要留神的是:path前面肯定要和终端以后地位相一致的相对路径,或者是绝对路径) 三.启动mongodb当你输出完下面门路的配置当前,回车当前看到如下报告,阐明你曾经启动了mongodb的服务器 留神,你当初并没有和数据库连贯,mongodb的服务器,和mogodb的存储的数据库并不是一个货色,它们相当于一个房间和地下室的关系,你创立一个空的collection的时候,(mongodb)以下统称为mgD,它只是临时把它放入到了一楼,当外面汇合有值的时候,它会把这个汇合放到地下室,也就是刚刚启动的服务器上。 这时候咱们须要重新启动一个终端,输出mongo 呈现这个界面,示意曾经胜利启动了mongodb,关上浏览器即可看到,端口号如果未设置,则默认为localhost://27017

April 11, 2022 · 1 min · jiezi

关于mongodb:MongoDB的原理基本使用集群和分片集群

@[toc] 一、MongoDB的外围概念概念MongoDB是文档数据库,存储都是相似json的Bosn文件。json与Bosn区别 相同点格局一摸一样。不同点json无奈定义数据类型。Bosn能够定义具体的数据类型。MongoDB与传统数据库的比照 | SQL术语/概念 | MongoDB术语/概念 | 解释阐明 | | --- | --- | --- | | database |database | 数据库 | |table|collection|数据库表\汇合| |row|document|行\文档| |colum|field|数据字段\域| |index|index|索引| |table joins||表连贯\MongoDB没有表连贯| |primary key|primary key|主键\MongoDB主动将_id字段设置主键|二、MongoDB的利用场景场景次要利用在微服务零碎中。微服务+数据库的形式如图: ![在这里插入图片形容](https://img-blog.csdnimg.cn/cc5c471d6e80465fa78044ebb33e4fee.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQEDnpZ7lhpzlhpnku6PnoIE=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)缺点如果客户端同时取得商品信息和订单信息,会同时收回两次微服务查问能力获取到数据。1、如果其中的一个微服务宕机,无奈查问数据2、如果客户端查问数据的并大量比拟大,这样会导致系统呈现性能问题。计划应用MongoDB;如图:三、MongoDB的我的项目落地条件 Demo微服务项目MongoDB链接:https://pan.baidu.com/s/15WGk... 提取码:geviMongoDB Compass 链接:https://pan.baidu.com/s/14PQm... 提取码:cul2步骤 装置MongoDB运行Mongodb D:\SoftWare\MogoDB\bin>mongod.exe --config "D:\SoftWare\MogoDB\bin\mongod.cfg"运行后果如图: MongoDB Compass 免装置间接到根目录下,运行MongoDBCompass.exe 即可。点击Connect,如图:装置Nuget包 MongoDB.Driver 我的项目实现 新建Person类和IPersonServer接口类PersonServer 实现类 using MongoDB.Driver; namespace MongoDB.Demo.Server { public class PersonServer : IPersonServer { private readonly IMongoCollection<Person> mongoCollection; public PersonServer() { var client = new MongoClient("mongodb://localhost:27017"); mongoCollection = client.GetDatabase("PersonDB").GetCollection<Person>("person"); } /// <summary> /// 增加数据 /// </summary> /// <param name="per"></param> public void Create(Person per) { mongoCollection.InsertOne(per); } } }IPersonServer 接口类 ...

April 9, 2022 · 9 min · jiezi

关于mongodb:云上MongoDB常见索引问题及最优索引规则大全

1►背景腾讯云MongoDB以后已服务于游戏、电商、社交、教育、新闻资讯、金融、物联网、软件服务、汽车出行、音视频等多个行业。 腾讯MongoDB团队在配合用户剖析问题过程中,发现云上用户存在如下索引共性问题,次要集中在如下方面:无用索引反复索引索引不是最优对索引了解有误等。 本文重点剖析总结腾讯云上用户索引创立不合理相干的问题,通过本文能够学习到MongoDB的以下知识点:如果了解MongoDB执行打算如何确认查问索引是不是最优索引云上用户对索引的一些谬误创立办法如何创立最优索引创立最优索引的规定汇总 本文总结的《最优索引规定创立大全》不仅仅实用于MongoDB,很多规定同样实用于MySQL等关系型数据库。 2►MongoDB执行打算判断索引抉择及不同索引执行家伙信息能够通过explain操作获取,MongoDB通过explain来获取SQL执行过程信息,以后继续explain的申请命令蕴含以下几种:aggregate, count, distinct, find, findAndModify, delete, mapReduce,and update。详见explain官网连贯:https://docs.MongoDB.com/manu...explain能够携带以下几个参数信息,各参数信息性能如下: 2.1.queryPlanner信息 获取MongoDB查问优化器抉择的最优索引和回绝掉的非最优索引,并给出各个候选索引的执行阶段信息,queryPlanner输入信息如下: cmgo-xxxx:PRIMARY> db.test4.find({xxxx}).explain("queryPlanner") { "queryPlanner" : { "parsedQuery" : { ......;//查问条件对应的expression Tree }, "winningPlan" : { //查问优化器抉择的最优索引及其该索引对应的执行阶段信息 ......; }, "rejectedPlans" : [ //查问优化器回绝掉的非最优索引及其该索引对应的执行阶段信息 ......; ] }, ...... }queryPlanner输入次要包含如下信息:parsedQuery信息 内核对查问条件进行序列化,生成一棵expression tree信息,便于候选索引查问匹配。winningPlan信息 "winningPlan" : { "stage" : <STAGE1>, ... "inputStage" : { "stage" : <STAGE2>, ... "inputStage" : { "stage" : <STAGE3>, ... } } }winningPlan提供查问优化器选出的最优索引及其查问通过该索引的执行阶段信息,子stage传递该节点获取的文档或者索引信息给父stage,其输入项中几个重点字段须要关注:字段名性能阐明stage示意SQL运行所处阶段信息,依据不同SQL及其不同候选索引,stage不同,罕用stage字段包含以下几种:COLLSCAN:该阶段为扫表操作IXSCAN:索引扫描阶段,示意查问走了该索引FETCH:filter获取满足条件的docSHARD_MERGE:分片集群,如果mongos获取到多个分片的数据,则聚合操作在该阶段实现SHARDING_FILTER :filter获取分片集群满足条件的docSORT:内存排序阶段OR:$orexpression类查问对应stage……rejectedPlans信息 ...

April 8, 2022 · 10 min · jiezi

关于mongodb:MONGODB性能问题诊断与优化

mongodb目前在业界的应用个别可分为两种架构:主从复制集和分片复制集集群。 因为分片复制集蕴含了主从复制集的性能,所以前面将以分片复制集为案例做阐明。 随同数据量的增长和业务压力的增大,常常有接管到mongodb分片集群的性能告警邮件。 我所保护的几套分片集群有时一天能收到200来封告警邮件,不胜其烦。告警邮件大抵分为三类: cpu 负载过高。cpu load average 值超过30,cpu 使用率超过50%。闲暇内存不足,系统对swap 分区应用超过50%。IO 负载过高。IOwait 超过40%。性能告警频繁,一线业务人员也不断反馈局部查问业务十分迟缓。有的平时失常状况执行很快的语句也变得十分慢。 以上种种性能问题如何解决呢。如何全面疾速的判断出零碎零碎性能瓶颈,而后给出相应的优化计划,让业务尽快安稳复原? 通过在理论生产中一直填坑后,总结出以下一些 mongodb性能问题诊断与优化的教训。 首先判断系统资源应用状况。 简略通过 top 命令可能迅速判断出零碎目前大抵的资源应用状况。 查看零碎cpu负载、io负载、内存应用状况等。有时不只是单纯的cpu 或者磁盘io或者内存吃紧一方面, 也有可能cpu、io,或者io、内存同时负载都很高。因而,咱们还须要借助性能监控工具做进一步深入分析。 mongodb 性能监控 通过mongostat 工具查看mongodb实例每秒读写数、执行命令、读写期待队列数、沉闷读写命令、网络吞吐、连接数等性能指标。 执行命令如下: 生产服务器主库30000端口,从库是30001端口。 /apps/svr/mongodb/bin/mongostat --host 127.0.0.1:30000 -uuser_name -p'password' --authenticationDatabase=admin 具体如下所示: 通过该性能监控工具至多能够理解mongodb实例整体连接数、读写申请数及读写比例(有的业务是读申请比重高,有的业务写申请比重较高)。 须要重点关注 qr|qw 读写期待队列数量。如果该值超过3或者超过cpu 核数,则代表cpu资源比拟吃紧,业务申请曾经开始积压。 通过 mongotop 查看mongodb 实例中热点表读写状况。 执行命令如下: /apps/svr/mongodb/bin/mongotop --port 30000 -uuser_name -p'password' --authenticationDatabase=admin 该监控工具将依照申请工夫从大到小进行排序的前10个表的申请耗费工夫打印进去。 依据 二八定理,咱们能够抉择对于占用申请工夫超过80%的热表慢查问进行针对性的性能剖析和优化。 查看以后mongodb实例具体执行的慢查问申请。 例如,通过以下命令查看msg库以后大于3秒的慢查问。 db.currentOp({"active" : true,"secs_running" : { "$gt" : 3 },"ns" : /^msg/}) 对于聚合剖析申请较多业务库,往往不断有超过100秒的聚合剖析语句正在执行。导致CPU和IO资源十分缓和。这时为了不影响失常业务的进行,只能临时抉择将很多沉积的慢查问语句先杀掉。 ...

April 7, 2022 · 2 min · jiezi

关于mongodb:阿里云数据库MongoDB版助力吉比特一念逍遥游戏斩获千万玩家运营效率成倍增长

清爽明快的修仙之旅:阿里云数据库MongoDB版助力吉比特《一念逍遥》游戏斩获千万玩家,经营效率成倍增长 中国游戏市场成长空间大,多样化需要显著寰球游戏市场近年来呈现出快速增长的趋势,中国在其中施展着重要的作用。得益于我国在人口以及游戏开发能力的劣势,国内游戏开发商一直推出不同主题、格调、模式的游戏,以满足更多游戏爱好者的需要和爱好。吉比特(G-bits)是家根植厦门、并跻身外乡当先的网络游戏研发和运营商,自其成立以来就深耕游戏市场,继续投入自主研发业务,领有弱小的自主研发能力,造就的游戏爆款连连。其中,《问道手游》《同化之地》《奇葩战斗家》《问道》等多款游戏在中国市场播种好评连连。《问道手游》更是依附其独特的“修仙”玩法在国内手游中自成一家,成为吉比特的一张王牌。 随着游戏格调品种与玩家数量的减少,游戏厂商面临的挑战也随之而来。如何可能在进步经营效率的同时,使玩家领有畅快的游戏体验感?吉比特通过去年推出的游戏作出了答复。《一念逍遥》手游是吉比特自研的一款水墨国风搁置修仙手游,于2021年2月1日开始发行,制作人沈予卿及研发团队心愿将《一念逍遥》打造成为一款不“肝”的(不必投入大量工夫精力和经济老本)、清爽明快的修仙手游,为中国玩家带来标新立异的轻型“修仙”体验。 对玩家体验与数据灵活性的高期待,催生出新的数据策略借助《一念逍遥》,研发团队施行了若干项突破性的尝试,因而对这款游戏抱有很大冀望。问世工夫尽管不长,团队一刻不敢怠慢,在无中断的前提下实现“小步快跑”式的运维和迭代,让玩家享受畅快的游戏体验。游戏体验和后盾运维环环相扣,而底层数据库软件和操作是玩家体验与运维的根底与保障。 在以前的游戏中,吉比特应用的是其余数据库(MySQL),当初,研发团队期待的是一款灵活性突出的数据库,促成这次调整的次要有以下三个起因: 首要是保障玩家的游戏体验顺畅无中断,这就要求平台具备游戏数据的无缝解决能力。即便后盾呈现故障,玩家的体验感也不应打折扣。因而,故障切换和复原的速度要快,数据备份回档的速度要快,服务响应工夫要求达到微秒级,从而缩小游戏停更工夫,保障玩家体验。 其次是在游戏运维层面,研发团队须要灵活处理各种运维流程所产生的数据,并及时反对新游公布。《一念逍遥》的治理平台规模宏大,无论是功能测试、性能测试、新游发行,还是上线经营各阶段,对于数据库资源需要不同,因而须要数据库可能高效地扩缩容;如果单台机器部署多台数据库实例,容易呈现CPU、IO资源争抢等问题。 第三是灵活性的需要。《一念逍遥》游戏角色属性常常变,角色的武器、道具的引入等,带来游戏逻辑和数据结构的动态变化,须要数据库具备高级别的灵活性,关系型数据模型也使得减少新的数据类型变得更加艰难。 尽管MySQL能够满足其一些大型移动游戏我的项目所需的根本性能和性能要求,然而每当须要对游戏施行扩大调整时,因为数据规模太大波及到分库,团队必须手动分片治理RDBMS,这就带来了繁琐的流程,有可能升高用户体验。 MongoDB和阿里云携手独特打造高灵活性和强性能的数据库沈予卿还记得在多年前就已经尝试过阿里云数据库 MongoDB版的性能,他对其简便且灵便的个性有粗浅的印象。 阿里云数据库 MongoDB 版是由阿里云运行的齐全治理的云数据库服务,并通过MongoDB Inc(构建和保护MongoDB软件的公司)认证。阿里云是中国为数不多的提供MongoDB即服务 (MongoDB-as-a-service) 的首要合作伙伴之一。有赖于这项服务,宽广网络游戏开发企业可能在中国这个寰球最大的市场之一施展创新能力,亲密关注各自宏大客户群的需要并及时响应。随着《一念逍遥》的推出,研发团队亟待找到一款更加灵便、性能更强的数据库。更换数据库软件是一项重大的工程,但到目前为止,其后果曾经超出了他们的预期。通过钻研之后,研发团队很快就抉择了阿里云数据库 MongoDB版。 沈予卿介绍道,《一念逍遥》的数据以JSON格局的文档模型进行存储,这与MongoDB文档数据库的性能个性井水不犯河水。同时,底层文档模型使开发人员轻松地进行批改和减少新的性能。 在保障游戏体验层面,阿里云数据库 MongoDB版具备现实的灵活性——它反对弹性扩缩容,满足各种场景的数据库资源需要。作为一个反馈迅速的云服务,它能够扩充和放大容量,以满足各种状况下的数据库资源需要(当用户数量多时,能够扩充,当用户数量少时,能够放大)。 不仅如此,灵便的模型可将角色数据保留在繁多汇合中,灵便更新且调整成本低;单可用区部署,这有助于为本地玩家提供百微秒的均匀查问响应工夫;正本集反对高可用,加上业务重试和缓存,能够确保服务稳固,玩家不掉线。 此外,针对《一念逍遥》在开发和经营层面的挑战,阿里云数据库 MongoDB版具备开箱即用的个性,可反对新游戏疾速发行。它能够通过阿里云的云备份和多线程复原oplog,大幅度晋升数据备份复原速度;此外,它还反对工作负载隔离,容许团队在部署中跨节点调配不同的工作负载,可能彻底解决资源抢占的问题,升高对游戏的负面影响。 修仙出海从公布至今,《一念逍遥》已积攒了千万用户,目前可反对几十万、将来可能会有更多玩家的同时在线,这也超出了研发团队最后的冀望。阿里云数据库 MongoDB版及其多线程增量复原oplog等性能,复原速度晋升了50倍,大幅度缩小了游戏停更工夫。 此外,阿里云数据库 MongoDB版在满足《一念逍遥》高性能需要的同时,还升高了吉比特在IT运维上的投入;它又凭借着欠缺的开箱即用性能,如监控、可视化和备份等,使企业的经营效率晋升了至多一倍,让团队更专一于游戏业务自身,从而持续深刻本人在游戏畛域的另一项大胆尝试——开发出本人的游戏编程语言Game Script(GS),这是一款和Python、JavaScript相似的动静语言。团队正在基于它打造游戏服务器框架。 不仅如此,随着往年阿里云数据库 MongoDB版已降级到5.0版本,研发团队期待借助新版原本开发更多的手游我的项目,在其中开掘和利用阿里云数据库MongoDB版的更多功能如原生时序汇合。而且,有了国内的成功经验,他们也正在打算让阿里云数据库 MongoDB版帮忙《一念逍遥》走出国门,让海内玩家也尝试“修仙”之路。 “数据就是咱们的‘身家性命’,这个说法毫不夸大。无论是游戏数据还是日志数据,阿里云数据库 MongoDB版的弱小性能和灵便拓展能力帮忙咱们进步了《一念逍遥》的开发和运维效率,为玩家带来无中断的‘修仙’体验,而我置信这仅仅是阿里云 MongoDB一小部分的能量。接下来,随着咱们着手开发更多的游戏我的项目,以及筹备施行海内推广策略期间,咱们期待可能更粗浅地开掘阿里云数据库 MongoDB版的更大潜能。” —— 吉比特技术核心负责人、《一念逍遥》制作人 沈予卿

March 31, 2022 · 1 min · jiezi

关于mongodb:带你详细了解mongodb数据库

启动MongoDB• 在C盘根目录下创立data文件夹,在data下 创立db文件夹 • 关上CMD命令行窗口,输出mongod • 32位零碎第一次启动: – mongod --storageEngine=mmapv1 • 呈现如下输入 指定端口和门路• 在控制台启动MongoDB – mongod --dbpath 门路 --port 端口号 – 示例: • mongod --dbpath C:\Users\lilichao\Desktop\mongo\data\db --port 123 • 留神:关上的命令行窗口不能敞开 配置mongo的windows服务• 在mongo装置目录的server下3.x目录下创立 mongod.cfg文件,并增加如下内容 systemLog:       destination: file       path: c:\data\log\mongod.log storage:      dbPath: c:\data\db • 管理员模式关上控制台,并输出如下指令 sc.exe create MongoDB binPath= "\"mongo bin门路\mongod.exe\" --service -- config=\"mongo门路\mongod.cfg\"" DisplayName= "MongoDB" start= "auto" • 删除服务 sc delete MongoDB ...

March 25, 2022 · 2 min · jiezi

关于mongodb:MongoDB与亚马逊云科技扩大全球合作

依据策略单干协定,单方将专一于减速客户工作负责迁徙至云。 寰球当先的古代通用数据库平台 MongoDB(NASDAQ代码:MDB)明天发表将大幅扩大与亚马逊云科技签订的多年期策略单干协定。基于该六年期单干协定框架,MongoDB 和亚马逊云科技将采取一系列动作,更便捷地推动单方独特客户的上云之旅,包含发展销售和营销畛域的整合市场流动、独特为开发人员赋能及提供培训、技术集成和商业激励措施,以简化本地工作负载向亚马逊云科技上的 MongoDB Atlas 迁徙。 这项协定建设在MongoDB和亚马逊云科技之间多年的良好单干之上,旨在进一步推动客户在亚马逊云科技上采纳MongoDB Atlas。为了进一步改善客户体验,两家公司将在销售、客户反对、技术、营销等畛域发展单干,为寰球的开发者提供在亚马逊云科技上应用MongoDB Atlas的卓越体验。具体工作包含晋升本地工作负载迁徙上云的激励力度,引入一系列加强性能,以帮忙客户从传统技术或从企业外部数据中心迁徙到亚马逊云科技上的MongoDB Atlas。两家公司还将在无服务器、Amazon Graviton处理器和Amazon Outposts等畛域通力合作,为客户提供全新性能。此外,单方还将携手将MongoDB扩大到寰球更多的亚马逊云科技天文区域以及美国公共事业(经美国联邦危险和受权治理打算(FedRAMP)受权)。 这些致力是继单方近期在亚马逊云科技re:Invent寰球大会上发表单干之后进行的,包含在亚马逊云科技Marketplace上提供MongoDB Atlas的即用即付服务,以及对亚马逊云科技治理控制台的更新,帮忙客户更容易找到MongoDB Atlas。该控制台将使客户通过亚马逊云科技Marketplace实现更简便的查找和购买体验。 Shutterfly首席技术官Moudy Elbayadi示意:“咱们在几年前启动了一项策略动作,旨在将整个Shutterfly电子商务平台迁徙到私有云上,因为咱们意识到,治理自建的基础设施的复杂性和整体老本会减弱咱们的创新能力。通过在亚马逊云科技上应用MongoDB Atlas,咱们的平台弹性和应用程序的整体性能都失去了晋升,使咱们的平台可能在季节性高峰期进行扩大。此外,咱们还能够缩小与治理自建数据库相干的日常工作,使咱们优良的团队可能专一于打造令客户称心的个性化体验。” MongoDB利用亚马逊云科技的寰球影响力和一系列服务一直晋升本身的数据库服务性能,使客户可能从寰球任何中央存储、拜访和构建应用程序。作为单干的一部分,MongoDB通过亚马逊云科技Marketplace赋能客户在亚马逊云科技上运行MongoDB Atlas,而且可能构建具备高可用性、全球性能劣势、高度平安并合乎隐衷规范的应用程序。亚马逊云科技上的MongoDB与亚马逊云科技其余服务独特使客户可能应用宽泛的分析方法来剖析数据,同时集成了机器学习和物联网等高级服务。 MongoDB寰球合作伙伴执行副总裁Alan Chhabra示意:“MongoDB 专为开发者设计,它提供一个跨地区、跨云和部署类型的利用数据平台,帮忙开发者解决事务性工作负载和古代应用程序面临的数据挑战。随着咱们与亚马逊云科技之间单干的一直深入与扩充,各行各业的更多客户将可能应用 MongoDB Atlas为新一代利用提供能源。” 亚马逊云科技寰球渠道与联盟副总裁Ruba Borno示意:“多年来,MongoDB 既是亚马逊云科技的客户,又是咱们值得信赖的合作伙伴,咱们借助亚马逊云科技宽泛且深刻的性能、成熟的经营性能和安全性,助力企业更快地将软件和数据迁徙至云端,并提供无缝的用户体验。在亚马逊云科技上运行 MongoDB Atlas 能够为客户提供更丰盛的利用开发体验,并帮忙客户更好地利用数据。咱们与MongoDB 秉持雷同的理念,即推动翻新、晋升可靠性,并帮忙商业和公共事业畛域内的初创企业及成熟企业成长为云端以数据为驱动的组织。”

March 22, 2022 · 1 min · jiezi

关于mongodb:MongoDB有哪些数据脱敏技术

为什么须要晓得覆盖技术?因为这是一种匿名化数据的办法,这样就能够应用蕴含敏感或个人信息的数据进行测试或开发。 即便你负责的数据库具备齐全的访问控制和安全性,你也可能须要多种数据脱敏技术来反对应用程序。 例如,你可能须要动静脱敏数据以确保应用程序不会裸露不必要的敏感信息。或者,如果您须要对理论生产数据运行测试或开发,而理论生产数据蕴含集体或敏感信息,则可能须要脱敏实在数据。 如果你须要将生产数据推到一个安全性较低的环境,你也须要进行数据脱敏技术,为了散发报告或者剖析相应的数据,并且必须保留报告所须要的根底数据。 出于培训或用户测试的目标,常见的做法是生成看起来像实在数据的假数据。这是一个不同的过程,须要不同的技能。 为什么须要脱敏数据?对于数据的各种规定实用于任何数据库、文件或电子表格。从法律的角度来看,在哪里保留数据并不重要。如果你是组织的一部分,你应该只能拜访适宜你在组织中角色的信息。如果你没有非法的理由拜访该数据,那么你必须无法访问该数据。 总结: 所有数据都必须以牢靠的形式进行治理,无论它在哪里保留。法律并不关怀你用什么办法存储数据,只有你这样做了。 如果蕴含可能获取集体的数据(PII数据),它必须在任何时候都具备拜访限度。此外,法律提供了就如何匿名或伪匿名数据给出批示性倡议。它只是要求在适当的时候这样做。 法律要求不能在匿名数据中辨认任何集体或个人,即便它与其余数据源联合在一起。如何让数据实现这一指标是咱们所关怀的,而实现这一指标的技术在以后的法律中没有明确的定义。 如果能够通过从新辨认或去匿名化来辨认集体,那么数据就没有正确地匿名化。这种从新辨认技术多年来被执法机构和情报机构用于破解立功网络,能够必定的是,暗网也有同样的技术。 脱敏与MongoDB因为你保留和解决数据的形式与法律无关,MongoDB和其余任何数据格式一样面临同样的挑战。 因为MongoDB在默认状况下不启用访问控制,所以第一个显著的步骤是提供基于角色的访问控制和数据库及服务器的安全性。 相干的浏览:MongoDB平安提醒,以确保远离黑客 然而,任何文档数据,无论是非结构化文本、YAML、JSON或XML,对于负责将其匿名化的任何人来说都有特定的问题。除非蕴含模式和标准的办法,否则敏感数据可能存在于任何中央,并且能够在多个中央反复。 在具备“非规范化”或蕴含XML或JSON列的关系型构造数据中,可能会遇到同样的问题。如果进行查看,通常会发现雷同的数据存在于多个地位,并且其中两个数据具备雷同的名称,而疏忽对它们进行脱敏,那么就存在潜在的破绽。 MongoDB基于汇合的概念。一个汇合,就像一个关系数据库表,蕴含一个或多个文档。每个文档都是一组键值对。 图片地址: https://studio3t.com/wp-conte... MongoDB应用汇合、文档和键值对来结构数据因为同一个汇合中的文档不须要具备雷同的字段集或构造,因而汇合文档中具备雷同名称的字段可能蕴含不同类型的数据。它们能够保留数组,其中能够蕴含各种类型的数据。 基本上,MongoDB很少强制执行模式。这使得制作一个零碎的自动化脱敏程序变得更加艰难。 事实上,如果没有统一的模式,那么定义掩码的过程会变得十分简短。要实现屏蔽,能够应用MongoDB的只读非物化视图、字段级密文或字段级加密等技术。 视图是最简略的办法,因为它们基于聚合管道,因而能够创立相当简单的汇合筛选器。您须要将这些数据托管到生产数据库中,并应用它们导出脱敏后的数据。 然而,只管这些办法能够实现假名化,但它们须要大量的编程,假如对模式进行正当的强制执行,并且不能满足所有的需要。 假名化、匿名化、聚合、屏蔽和数据生成有很多技术能够使数据匿名。最合适的抉择取决于您须要匿名化数据的起因。 如果为了开发工作的须要,那么任何敏感数据必须被脱敏。为了培训或用户测试,数据也必须是须要脱敏。为了测试数据的弹性和可伸缩性,数据生成来提供必要的办法。 聚合 如果数据是用于报告的,那么仅仅通过在报告所需的最低级别上,提供一个聚合就能够实现很大的成果。 例如,如果它是用于报告交易,而最具体的报告是对于一天的交易,那么数据只能提供每天的数据。 如果某些群体的人数较少,聚合的集体数据能够被从新辨认。这产生在凋谢数据医疗信息和立功记录上。 屏蔽 动静屏蔽不同于动态屏蔽,因为它是对数据查问的后果进行屏蔽。它只在目的地具备访问控制以避免长期查找/连贯的状况下无效。不同的数据库系统以不同的形式进行动静屏蔽,但MongoDB应用视图和编校投影技术。动静屏蔽的长处是它防止毁坏束缚数据的利用程序逻辑。 如果将放入理论的数字数据中,它可能会在JSON Schema中失败,因为它不再看起来像一个数字。 如果你有一个电话号码、邮政编码或卡号,状况就更简单了,因为如果违反了校验和或非凡的验证规定,那么用数字覆盖的数字的验证可能会失败。 假名化 假名化是一种数据覆盖技术,其中集体可能须要从新辨认。 例如,如果一家医院须要依据病史对某些病理或最佳医治的可能性进行剖析,则报告必须覆盖集体细节,以便从新辨认。 最显著的是,在必要的医疗信息中留下一个“代替”键,以取代集体(PII)信息,而后可用于从随后的报告中从新辨认个别患者。 如果个人信息“泄露”到医疗信息中,并且在法律上不认为这等同于匿名化,那么这种安全性就会被突破。 数据生成 数据生成用于应用程序测试和培训:对于尚未公布的应用程序,它是惟一的办法。它可能看起来很简略,而且它可能只是字段中的信息可能是相干的。客户将失去逻辑统一的信息,可能是与性别相干的,约会可能须要在其余约会之前或之后,并将须要一个实在的跨度。 Studio 3T中的数据屏蔽Studio 3T中的数据屏蔽是对其编辑和操作MongoDB数据能力的一个显著的扩大,它与它的“Reschema”性能无效地联合在一起。这将通知你许多对于数据地位的信息。 数据屏蔽由“工作”以与任何其余可反复作业雷同的形式实现,能够保留、调度和编辑。拜访屏蔽数据,右键单击要屏蔽的汇合,而后在呈现的上下文菜单中单击“屏蔽汇合”。 图片地址: https://studio3t.com/wp-conte... 在Studio 3T的任意汇合上单击右键,抉择屏蔽汇合一个工作由一个或多个“单元”组成,每个单元治理一个汇合的屏蔽。一个“单元”容许您屏蔽整个汇合,并决定哪些字段应该混同。您能够屏蔽原始汇合,也能够将其保留为新汇合。 在它的第一个版本中,集中探讨了通常用于动态数据屏蔽的“屏蔽”技术。你还不能做混排,同步或替换。屏蔽的类型取决于字段的数据类型。 图片地址: https://studio3t.com/wp-conte... Studio 3T中的“数据屏蔽单元”能够从20种不同的数据类型中抉择一种,屏蔽或混同的类型取决于数据类型。 例如,数组能够被排除、空值或空对象。字符串局部或全副替换为散列(#)或星号(*)字符。整数能够与原始值不同,能够是原始值的一个变动百分比,也能够是原始值的一个固定百分比,或者能够用一个固定的值替换它们。 日期能够在您能够定义的范畴内给出一个随机值。 图片地址: https://studio3t.com/wp-conte... 编辑字段映射并抉择数据屏蔽技术 这只有简略几个合乎模式的汇合的数据库,因为每个字段是齐全独立实现的,并没有为用户自行设定默认值,你须要抉择相干的办法,(例如,一个整数的方差)这不是疾速的大型数据库。 这种屏蔽的第一次迭代对于大多数目标来说曾经足够了,然而如果它无效地执行了,您的数据看起来就不会那么丑陋,而且可能不会有雷同的散布。然而,它是无效的。 对于咱们这些对数据混同感兴趣的人来说,他们对混同文本的形式感到骄傲,这种形式使文本看起来像实在的数据,甚至通过束缚和模式验证规定。实际上,这只在培训、用户验收或性能测试中应用。 Studio 3T提供的屏蔽性能在第一次迭代中提供了足够的性能,容许在一般开发工作和“上游”报告中屏蔽数据。 ...

March 15, 2022 · 1 min · jiezi

关于mongodb:网络研讨会MongoDB-Vs-效仿者选择MongoDB的理由

MongoDB 间断4年被评为最受开发人员欢送的数据库,这使得其余数据库公司纷纷效仿 MongoDB API 来取悦他们的用户。DocumentDB 和 DynamoDB就是常见的例子,只管它们没有提供与 MongoDB 等同的易用性、性能或性能。 立刻注册MongoDB Vs 效仿者:抉择MongoDB的理由网络研讨会(复制下方链接到浏览器) https://live.polyv.cn/watch/2... 咱们将在其中探讨 MongoDB 和其它 NoSQL 数据库之间的次要区别,以帮忙您确定哪个数据库更适宜您的应用程序。 主讲人:唐峰 MongoDB 北亚区服务经理 工夫:2022年3月23日 星期三 14:00-15:00 模式:在线直播 费用:收费 扫描下方二维码注册参会并填写调研问题将有机会取得精美定制礼品!

March 15, 2022 · 1 min · jiezi

关于mongodb:一文读懂-MongoDB驱动程序-API

回调API和外围API回调 API: 启动一个事务,执行指定的操作,并提交(或出错时停止)。 主动蕴含 "TransientTransactionError" 和 "UnknownTransactionCommitResult" 的错误处理逻辑。 外围 API: 须要显式调用来启动事务并提交事务。 不蕴含 "TransientTransactionError" 和 "UnknownTransactionCommitResult" 的错误处理逻辑,而是为这些谬误提供了蕴含自定义错误处理的灵活性。 回调API回调 API 蕴含以下逻辑: 如果事务遇到 "TransientTransactionError",则作为一个整体重试事务。 如果提交遇到 "UnknownTransactionCommitResult",则从新这个提交操作。 示例:该示例应用新的回调 API 来处理事务,它启动事务、执行指定的操作并提交(或在出错时停止)。新的回调 API 蕴含 "TransientTransactionError"或"UnknownTransactionCommitResult" 提交谬误的重试逻辑。 重要 举荐。应用针对 MongoDB 部署版本更新的 MongoDB 驱动程序。对于 MongoDB 4.2 部署(正本集和分片集群)上的事务,客户端必须应用为 MongoDB 4.2 更新的 MongoDB 驱动程序。 应用驱动程序时,事务中的每个操作必须与会话相关联(行将会话传递给每个操作)。 事务中的操作应用 事务级别的读关注,事务级别的写关注,和 事务级别的读偏好。 在 MongoDB 4.2 及更早版本中,你无奈在事务中创立汇合。如果在事务外部运行,导致文档插入的写操作(例如 insert 或带有 upsert: true 的更新操作)必须在 已有的 汇合上执行。 从 MongoDB 4.4 开始,你能够隐式或显式地在事务中创立汇合。然而,你比须应用针对 4.4 更新的 MongoDB 驱动程序。无关详细信息,请参阅 在事务中创立汇合和索引。 // WithTransactionExample is an example of using the Session.WithTransaction function.func WithTransactionExample() { ctx := context.Background() // For a replica set, include the replica set name and a seedlist of the members in the URI string; e.g. // uri := "mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017/?replicaSet=myRepl" // For a sharded cluster, connect to the mongos instances; e.g. // uri := "mongodb://mongos0.example.com:27017,mongos1.example.com:27017/" var uri string clientOpts := options.Client().ApplyURI(uri) client, err := mongo.Connect(ctx, clientOpts) if err != nil { panic(err) } defer func() { _ = client.Disconnect(ctx) }() // Prereq: Create collections. wcMajority := writeconcern.New(writeconcern.WMajority(), writeconcern.WTimeout(1*time.Second)) wcMajorityCollectionOpts := options.Collection().SetWriteConcern(wcMajority) fooColl := client.Database("mydb1").Collection("foo", wcMajorityCollectionOpts) barColl := client.Database("mydb1").Collection("bar", wcMajorityCollectionOpts) // Step 1: Define the callback that specifies the sequence of operations to perform inside the transaction. callback := func(sessCtx mongo.SessionContext) (interface{}, error) { // Important: You must pass sessCtx as the Context parameter to the operations for them to be executed in the // transaction. if _, err := fooColl.InsertOne(sessCtx, bson.D{{"abc", 1}}); err != nil { return nil, err } if _, err := barColl.InsertOne(sessCtx, bson.D{{"xyz", 999}}); err != nil { return nil, err } return nil, nil } // Step 2: Start a session and run the callback using WithTransaction. session, err := client.StartSession() if err != nil { panic(err) } defer session.EndSession(ctx) result, err := session.WithTransaction(ctx, callback) if err != nil { panic(err) } fmt.Printf("result: %v\n", result)}外围API外围事务 API 不蕴含标记谬误的重试逻辑: ...

March 11, 2022 · 4 min · jiezi

关于mongodb:MongoDB案例分享如何使用oplog恢复数据

最近跟数据恢复杠上了,这不又来一例。对于备份复原的问题其实我在6年多以前就写过,其中大部分探讨放在明天依然实用。 案例介绍某用户应用了MongoDB 4.0,数据库中的一个表因为drop操作导致数据全副失落。但因为库自身很小,而oplog空间足够大,所以从建库至今的所有操作都尚在oplog中没有被回收。基于这种状况,尽管他们没有全量备份,咱们依然能够通过残缺重放oplog来找回所有失落的数据。所以咱们的操作是: 导出oplog; 寻找drop产生的工夫戳; 重放到drop前一刻; 将复原的数据dump/restore到生产库; 步骤4属于基本操作就不具体叙述了,次要来看后面3步。 复原步骤2.1 导出oplog这一步实际上特地简略。oplog位于local.oplog.rs汇合中,咱们能够应用mongodump间接导出,导出节点能够是主节点或从节点。根本模式是: mongodump --host <host>:<port> -d local -c oplog.rs -u <user> --authenticationDatabase <adb>失去如下输入: > tree dumpdump└── local ├── oplog.rs.bson └── oplog.rs.metadata.json1 directory, 2 files咱们须要的就是oplog.rs.bson。 2.2 寻找截止工夫戳进行重放的要害是要先找出重放截止到哪条oplog。这里有两种方法: 计划1从oplog.rs.bson中搜寻关键字drop。 > bsondump dump/local/oplog.rs.bson | grep drop{"ts":{"$timestamp":{"t":1646056645,"i":1}},"t":{"$numberLong":"1"},"h":{"$numberLong":"7307295890643732087"},"v":{"$numberInt":"2"},"op":"c","ns":"test.$cmd","ui":{"$binary":{"base64":"9sakiEOMS2qjwBZ5O0mQjQ==","subType":"04"}},"wall":{"$date":{"$numberLong":"1646056645661"}},"o":{"drop":"survey"}}如果屡次呈现drop记录,则要本人留神分别哪条是你想要的那条。而后留神记录中{"t":1646056645,"i":1}是咱们要截止到的工夫戳,前面将会用到这个数据。另外留神如果oplog较多时该方法可能会耗时较长。 计划2从local.oplog.rs中查问。这种查询方法通常会比计划1快,但须要在原始零碎上运行查问,可能造成肯定的累赘。如果零碎自身压力曾经较大,则要留神避开业务高峰期。另外也能够在从节点上执行查问以避开压力最大的主节点。这里要留神的是每个节点上保留的oplog可能不一样多,但肯定是统一的。例如,某个节点上的oplog有1,2,3,4,5共计5条,其余节点上可能只有: 2,3,4,5 3,4,5 4,5 5 这种状况通常是因为从节点是起初加进集群里导致的。那么想要查问时,能够应用: > use local> db.oplog.rs.find({"o.drop": {$exists: true}}).sort({$natural: -1}).limit(1);{ "ts" : Timestamp(1646056729, 1), "t" : NumberLong(1), "h" : NumberLong("6882491835596436855"), "v" : 2, "op" : "c", "ns" : "test.$cmd", "ui" : UUID("a98cba5a-066b-46fe-92a9-d122386dba5d"), "wall" : ISODate("2022-02-28T13:58:49.167Z"), "o" : { "drop" : "survey" } }同样留神Timestamp(1646056729, 1)是咱们将要用到的截止工夫戳。 ...

March 11, 2022 · 2 min · jiezi

关于mongodb:MongDB学习笔记一-初遇篇

本周去见了高中同学, 还是蛮开心的。原本打算的是写MySQL数据库事务的实现或者MySQL优化系列的文章,然而还没有想到如何组装这些常识。 索性这周换个方向,写写NOSQL。思考到有些同学对JSON还不是很理解,这里咱们先介绍MongDB的基本概念,再接着讲述为什么要引入MongDB,再解说该如何应用。 是什么? whatMongoDB is a document database designed for ease of application development and scaling 《MongDB官网》 MongDB是一个为高扩展性、高可用性而设计的文档数据库。 留神到MongDB是一个文档数据库,文档数据库与咱们常见的关系型数据库有什么区别呢?咱们首先来看这个文档,也就是document到底是什么含意? MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档相似于JSON对象。字段的值能够包含其余文档,数组和文档数组。 对于什么是JSON? 参看我写的文章: 傻傻弄不分明的JSON? 所以MongDB的记录是一个相似于一个JSON对象的文档,MongDB将文档存储在汇合中,汇合相似于关系数据库中的表。存取关系相似于上面的图: 下面咱们提到MongDB的记录是一个相似于JSON的文档,之所以是相似于,是因为MongDB采取的是BSON,BSON = Binary JSON, 也就是二进制模式的JSON,但同时又裁减了JSON,具备JSON中不具备的数据类型,像日期类型(Date type)、二进制数据类型(BinData type)。 为什么要引入MongDB?那为什么要引入MongDB呢? 或者说MongDB绝对于关系型数据库有哪些劣势呢? 十年前,当 Dwight 和我开始这个起初成为 MongoDB 的我的项目的时候,咱们相对没有想到它明天的样子。咱们只有一个信念:让开发者更高效。MongoDB 诞生于在宏大简单的业务部署中应用关系型数据库给咱们带来的丧气。咱们着手建造一个咱们本人想用的数据库。这样,每当开发者想写一个利用时,他们能够专一于利用自身,而不必围着数据库转。 MongoDB 的十年,一个创始人的回顾所以就是在某些畛域,MongDB能够让开发者更高效。 知乎上有一个问题: MongoDB 等 NoSQL 与关系型数据库相比,有什么优缺点及实用场景?上面的有一个MongDB的开发者做了答复,这里我简略摘录一下他的答复: 文档(JSON)模型与面向对象的数据表达方式更类似更天然。与关系型数据库中的表构造不同,文档(JSON)中能够嵌入数组和子文档(JSON),就像程序中的数组和成员变量一样。这是关系型数据库三范式不容许。但理论中咱们常常看到一对多和一对一的的数据。比方,一篇博客文章的Tag列表作为文章的一部分十分直观,而把Tag与文章的从属关系独自放一张表里就不那么天然。SQL语音能够很准确地形式化。然而三大范式强调的数据没有任何冗余,并不是明天程序员们最关怀的问题,他们用着不便不不便才是更重要的问题。这里咱们就得出MongDB绝对于关系型数据库的第一个劣势,在某些场景下MongDB比关系型数据库不便,留神是在某些场景下。性能 三大范式带来的jojn,有的时候为了满足一个查问,不得不join多表,但join多表的代价是随着数据的晋升,查问速度会变得很慢,更简略的拜访模式能够让开发者更容易了解数据库的性能体现,举一个典型的场景就是,我join了十张表,在这样的状况下,我该如何加索引能力取得最优对的查问速度。 灵便 如果须要加字段,从数据库到应用层可能都须要改一遍,只管有些工具能够把它自动化,但这依然是一个简单的工作。 MongDB没有Schema,就不须要改变数据库,只须要在应用层做必要的改变。(这句话能够这么了解,认真看下面画的MongDB存取数据的图,汇合中当初存取的学生都有三个字段,事实上MongDB容许文档领有不同的字段) 自定义属性也是一个问题,比方LCD显示器和LED显示的产品个性就不一样,数据的这种个性被称为多态,放在关系型数据库中,产品这个表应该怎么设计? 一般来说最简略的计划是将每个可能的属性都变成独自一列,但如果显示器厂商每年推出一个新个性,那么这个表就要常常的改变,扩展性不强。还有一种更加极其的场景是,一个通讯录容许用户随便增加新的联系方式,一种计划是将这种自定义联系方式放在一列,用json存储。 MongDB的灵便还体现在非结构化和半结构化的数据上, MongDB提供全文索引,也反对地理位置查问和索引。例如一位用户想晓得方圆五公里哪里有公共卫生间,这是「天文范畴查问」。而后他搜寻最近的单车。摩拜单车正是应用 MongoDB 实现这样的「间隔排序查问」。强烈建议应用地理位置索引减速查问,因为我能了解这位用户的情绪。 可扩展性 MongDB原生自带分片,对应的就是关系型数据库的分库分表。 哪些场景下MongDB不适宜MongDB的开发者周思远举了一个场景,他在一个我的项目中须要地铁列车时刻表,官网提供的是一个满足行业标准的SQL格局的数据,也就是依照三大范式分成了好几张表。而后他花了一早晨把数据库导入到了MongDB中。然而他说如果再来一次,他可能会间接选取关系型数据库,因为如果源数据格式就是SQL数据,没法管制,数据量小;穿插援用关系丰盛,查问模式丰盛,利用又不须要高性能,那么关系型数据页也是一个求实的抉择。我对这句话的了解是站在建模利用数据的角度不同,在某些场景下,关系型数据库提供的SQL在统计数据、查问、剖析方面依然具备弱小的劣势。 怎么用?有了,what和why之后,咱们就能够开始用起来了,也就是开始装置应用,比拟侥幸的是MongDB有个国人保护的中文操作手册: 介绍的相当具体,也有装置教程,也有收费试用: 所以对于我这种我抉择了面试试用,点进去,我抉择的开发场景是开发微服务,你也能够抉择在本地装置,这篇手册上的装置教程写的还是蛮具体的,这里我就放个地址,不做具体介绍了。https://docs.mongoing.com/ins... 然而这种在云端的数据库,装置MongDB的shell可能略微比拟麻烦一点,我在windows上装置了良久感觉都没胜利,这里能够用MongDB的GUI,下载地址如下: https://downloads.mongodb.com... ...

March 6, 2022 · 2 min · jiezi

关于mongodb:MongoDB常见问题解答时间与时区

这期次要来聊一下MongoDB中的时区问题。 这个问题尽管简略,总有同学会问到,集中解答一下。 提出这个问题通常是因为在应用Mongo Shell后发现其中展现的工夫比中国工夫落后8小时而产生的。 比方:插入工夫是2021年1月1日00:00:00,在Shell中看到的则是ISODate("2020-12-31T16:00:00Z"),很多人由此产生纳闷,8小时去哪了?是不是出错了? 了解这个问题首先要了解时区的概念。当你同时向一个身处中国的人和身处美国的人发问当初是几点时,中国人答复中午12点,美国人答复的却是凌晨4点。这有区别吗?他们说错了吗?他们都没错。他们答复不一样是因为身处不同的时区,然而他们指代的都是同一个工夫:当初。 也能够说,全世界只有一个工夫,只是大家形容它的形式不一样——依据本人身处的地区。而有个现状会把这个问题搞得更简单,那就是夏令时。 我国当初曾经不施行夏令时了(对,过来有过!裸露年龄!),然而世界上有很多国家依然保留夏令时的习惯。这让本来简单的工夫表白更加雪上加霜。这在施行同样的工夫规定的人之间不会造成问题。 然而在国际化的明天,你晓得一个中国人跟一个施行了夏令时的德国人约一个会议工夫有多难?或者在看到一个德国工夫2020年5月7日18点,你晓得它是英国工夫的几点吗?你不光要晓得英德的时差,还要晓得2020年5月7日这个工夫在德国是不是在夏令时的影响范畴内,以及在英国它是不是在夏令时的影响范畴内。当初有没有感觉小瞧了工夫的复杂性? 为了简化这些简单的问题,有了UTC (Universal Time Coordinated)工夫规范以及表白工夫的规范ISO 8601,也就是咱们在MongoDB中看到的ISODate。 ISODate的示意办法简略来说就是年月日时分秒+时区。以咱们后面的例子来说,身处中国时咱们的时区是UTC+8,用ISODate表白则是ISODate("2021-01-01T00:00:00+0800")。这个工夫在MongoDB中的表白是ISODate("2020-12-31T16:00:00Z"),其中的Z示意UTC(或者UTC+0)。因为时区的不同导致了表达方式不同,但这两个工夫指代的是同一时刻,所以两者没有什么不一样。而在展现时,则应该依据你的用户所处的时区来决定到底显示哪一个后果。 须要留神的是:有些语言的驱动(例如Java/C#)在读取到工夫时会主动转换为服务器工夫,所以不须要再人为转换。有些语言(例如Python)则不会主动转换。应用时应该依据你的理论状况决定解决形式。 作者介绍:张耀星 MongoDB大中华区首席征询参谋,供职于MongoDB售后服务团队5年+,领有近10年MongoDB应用教训。

March 3, 2022 · 1 min · jiezi

关于mongodb:记某核心MongoDB集群索引优化实践

腾讯云数据库MongoDB人造反对高可用、分布式、高性能、高压缩、schema free、欠缺的客户端拜访平衡策略等性能。云上某重点用户基于MongoDB这些劣势,选用MongoDB作为主存储服务,该用户业务场景如下: · 存储电商业务外围数据 · 查问条件多变、查问不固定,查问较简单,查问组合泛滥 · 对性能要求较高 · 对存储老本有要求 · 流量占比:insert较少、update较多、find较多、峰值流量较高 · 高峰期读写流量数千/秒 通过和业务沟通,理解业务应用场景和业务述求后,通过一系列的索引优化,最终完满解决读写性能瓶颈问题。本文重点剖析该外围业务索引优化过程,通过本文能够学习到以下知识点: · 如何确定无用索引? · 如何确定反复索引? · 如何创立最优索引? · 对索引的一些错误认识? · 索引优化收益(节俭90%以上CPU资源、85%磁盘IO资源、20%存储老本) 问题剖析过程收到用户集群性能瓶颈反馈后,通过集群监控信息及服务器监控信息能够看出集群存在如下景象: · Mongod节点CPU耗费过高,CPU时不时耗费靠近90%,甚至100% · 磁盘IO耗费过高,单节点IO资源耗费占整服务器60% · 大量慢日志(次要集中在find和update),高峰期每秒数千条慢日志 · 慢日志类型各不相同,查问条件泛滥 · 所有慢查问都有匹配到索引 登录服务器对应节点后盾,获取慢日志信息,发现mongod.log中蕴含大量不同类型find和update的慢日志,慢日志都有走索引,任意提取一条慢日志其内容如下: Mon Aug 2 10:34:24.928 I COMMAND [conn10480929] command xxx.xxx command: find { find: "xxx", filter: { $and: [ { alxxxId: "xxx" }, { state: 0 }, { itemTagList: { $in: [ xx ] } }, { persxxal: 0 } ] }, limit: 3, maxTimeMS: 10000 } planSummary: IXSCAN { alxxxId: 1.0, itemTagList: 1.0 } keysExamined:1650 docsExamined:1650 hasSortStage:0 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:15 nreturned:3 reslen:8129 locks:{ Global: { acquireCount: { r: 32 } }, Database: { acquireCount: { r: 16 } }, Collection: { acquireCount: { r: 16 } } } protocol:op_command 227ms Mon Aug 2 10:34:22.965 I COMMAND [conn10301893] command xx.txxx command: find { find: "txxitem", filter: { $and: [ { itxxxId: "xxxx" }, { state: 0 }, { itemTagList: { $in: [ xxx ] } }, { persxxal: 0 } ] }, limit: 3, maxTimeMS: 10000 } planSummary: IXSCAN { alxxxId: 1.0, itemTagList: 1.0 } keysExamined:1498 docsExamined:1498 hasSortStage:0 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:12 nreturned:3 reslen:8039 locks:{ Global: { acquireCount: { r: 26 } }, Database: { acquireCount: { r: 13 } }, Collection: { acquireCount: { r: 13 } } } protocol:op_command 158ms 从下面的日志打印能够看出,查问都有走 { alxxxId: 1.0, itemTagList: 1.0 } 索引,走该索引扫描的keysExamined为1498行,扫描的docsExamined为1498行,然而返回的doc文档数却只有nreturned=3行。 ...

March 3, 2022 · 10 min · jiezi

关于mongodb:MongoDB-数据实时同步利器Tapdata-Cloud-免费上手指南

偶尔接触到 Tapdata Cloud,据说不仅能够实现MongoDB数据实时同步,还永恒 100% 收费,但就是不晓得怎么获取、怎么用?关上相干文档逐步陷入迷茫,术语随处可见,小白慌乱?报错!报错!报错!从装置到放弃,想晓得本人的操作问题在哪里?手握神器但不会用、用不好?Agent 是什么?架构原理又是什么?数据库该怎么配置?新性能又优化了哪些场景……站在 Tapdata Cloud 实时数据同步之旅的终点,你是否也是这样,还有很多亟待解答的问题?如果这些恰好是你踩过的坑,或是正在经验的困扰,这里恰好有一个为你量身定制的流动 2月23日下午14:30-15:30,Tapdata Cloud 在线研讨会第 3 期如约而至,Tapdata 项目经理马建平手把手教你零根底学习 Tapdata Cloud 相干术语、性能架构、操作方法……同时凋谢线上答疑,帮忙解决你应用过程中的常见问题。 当初报名加入流动,更有机会取得精美奖品。更多流动相干信息及获奖形式,详见下文: 01流动详情 主题: 如何疾速上手Tapdata Cloud开启「0代码」异构数据实时同步新体验 主讲人: 马建平 Tapdata项目经理 工夫:2022年2月23日(周三)14:30-15:30模式:在线直播 | 收费论坛 内容: ① 「Tapdata Cloud」是什么,如何获取应用权限② 「Tapdata Cloud 」最新性能个性介绍 ③ 「Tapdata Cloud」使用指南: Tapdata Agent 性能及架构原理Tapdata Agent 装置演示及常见问题Tapdata Cloud 连贯治理模块常见术语表总览:Schema、CDC、增量与全量同步概念辨析等几种常见的数据库连贯配置介绍及常见问题解答④ 自在问答 适宜人群:Tapdata Cloud 用户、关注实时数据同步问题的 DBA/开发/架构师等 报名形式: ① 关注 Tapdata 微信公众号,会前可由此查收参会链接 ② 增加官网小助手微信,进入技术交换群,第一工夫 get 流动直播链接 02丰盛好礼 获奖形式1:转发赢「会前抽奖」机会 转发本流动链接至朋友圈,截图发送至官网小助手即可参加抽奖。咱们将于在线研讨会开始前1小时,即2月23日13:30开奖。 奖项设置:共抽取5名获奖者,别离取得小爱音箱(1份)、艺术沙画(1份),以及数据库畛域优质图书(3份)。 获奖形式2:研讨会现场参加「会中抽奖」 2月23日研讨会期间,依照主持人批示参加流动过程中设置的抽奖环节。 奖项设置:共抽取5名获奖者,别离取得小爱音箱(1份)、艺术沙画(1份),以及数据库畛域优质图书(3份)。 更多 Tapdata Cloud 动静及信息请辨认海报二维码进入后盾征询哦~ ...

February 25, 2022 · 1 min · jiezi

关于mongodb:MongoDB-University-中文字幕视频上线

MongoDB认证考试流动自推出以来,受到了宽广MongoDB爱好者的欢送和积极参与,曾经有不少人顺利通过考试,拿到了期待已久的证书。 但同时,也有很多人反馈,因为本人英语水平无限,所以对认证考试望而生畏。或者在备考过程中,因为语言问题受到了很大的妨碍。 这些咱们都看在眼里,记在了心里。 往年,终于,在认证团队的一直致力下,视频课程有中文字幕了!(此处应该有掌声) 目前已增加中文字幕的课程如下:Atlas - A131 / A300MongoDB - M001 / M100 / M103 / M220(J/JS/N/P) 只需简略几步即可查看嵌有中文字幕的课程:登陆University主页,点击右上角你的名字;点击 University Preferences;Serve video from 处抉择 Kaltura;抉择你所在的时区;(这一点十分重要!)点击 "Save"关上视频课程页面,点击 “CC” 来抉择字幕。 怎么加入认证流动 即日起至2022年12月31日,凡报名并参加考试的MongoDB爱好者,可享受半价优惠,若能胜利取得认证,可到MongoDB官网报销当次认证考试费用(分两批进行报销:往年7月和明年1月),并额定取得MongoDB派发的大礼包一份!(每人最多一份,不可反复取得) 流动具体政策和半价优惠码将在线上答疑会中公布,线上答疑会将于2月23日下午2点开始,扫描下方二维码即可报名。 扫描上方二维码进行报名 还可退出MongoDB认证交换群与更多MongoDB爱好者交换考试心得,入群形式: 增加小芒果微信并回复“认证”(微信ID:mongoingcom) 为什么要考认证 对于为什么要考认证,先来听听“过来人”是怎么说的: DBA认证考试的筹备过程,对于我应用MongoDB还是十分有帮忙的,可能让咱们较好地把握运维、应用以及性能优化的最佳实际。 通过这次的认证考试让我更零碎和全面地理解了MongoDB,这些常识储备让我更好地应答日常的开发工作,有更多的方法论去对数据模型进行优化,取得更好的性能。 对于MongoDB认证 全世界的MongoDB认证专家正在助力守业公司和成熟企业冲破数据库的工作边界。不论是管理者、培训师还是技术专家,他们都在向其他人分享着第一手的常识和教训。 取得MongoDB认证的开发人员和DBA,是MongoDB官网认可的具备构建和保护MongoDB应用程序所需常识的专业人士。MongoDB认证分两类:DBA认证和开发者(Developer)认证。

February 17, 2022 · 1 min · jiezi

关于mongodb:MongoDB在vivo评论中台的应用案例

本文来自取得《2021MongoDB技术实际与利用案例征集流动》入围案例奖作品作者:vivo互联网技术 1.业务背景随着公司业务倒退和用户规模的增多,很多我的项目都在打造本人的评论性能,而评论的业务状态根本相似。过后各我的项目都是各自设计实现,存在较多反复的工作量;并且不同业务之间数据存在孤岛,很难产生分割。因而咱们决定打造一款公司级的评论业务中台,为各业务方提供评论业务的疾速接入能力。在通过对各大支流app评论业务的竞品剖析,咱们发现大部分评论的业务状态都具备评论、回复、二次回复、点赞等性能。具体如下图所示:波及到的外围业务概念有:【主题 topic】 评论的主题,商城的商品、利用商店的app、社区的帖子。【评论 comment】用户针对于主题发表的内容。【回复 reply】用户针对于某条评论发表的内容,包含一级回复和二级回复。 2.为什么抉择MongoDB团队在数据库选型设计时,比照了多种支流的数据库,最终在MySQL和MongoDB两种存储之进行抉择。 因为评论业务的特殊性,它须要如下能力:【字段扩大】业务方不同评论模型存储的字段有肯定差别,须要反对动静的主动扩大。【海量数据】作为公司中台服务,数据量随着业务方的增多成倍增长,须要具备疾速便捷的程度扩大和迁徙能力。【高可用】作为中台产品,须要提供疾速和稳固的读写能力,可能读写拆散和主动复原而评论业务不波及用户资产,对事务的要求性不高。因而咱们选用了MongoDB集群作为了最底层的数据存储形式。 3.MongoDB在评论中台的利用3.1 MongoDB集群常识 集群架构因为单台机器存在磁盘/IO/CPU等各方面的瓶颈,所以MongoDB提供集群形式的部署架构,如图所示: 次要由以下三个局部组成:mongos:路由服务器,负责管理利用端的具体链接。利用端申请到mongos服务后,mongos把具体的读写申请转发应的shard节点上执行。一个集群能够有1~N个mongos节点。config:配置服务器,用于分存储分片汇合的元数据和配置信息,必须为复制集(对于复制集概念戳我) 形式部署。mongos通过config配置服务器合的元数据信息。shard:用于存储汇合的分片数据的MongoDB服务,同样必须以复制集形式部署。 片键MongoDB数据是存在collection(对应MySQL表)中。集群模式下,collection依照片键(shard key)拆分成多个区间,每个区间组成一个chunk,依照规定散布在不同的shard中。并造成元数据注册到config服务中治理。 分片键只能在分片汇合创立时指定,指定后不能批改。 分片键次要有两大类型:hash分片:通过hash算法进行散列,数据分布的更加均匀和扩散。反对单列和多列hash。范畴分片:依照指定片键的值散布,间断的key往往散布在间断的区间,更加适用范围查问场景。单数据散列性由分片键自身保障。 3.2 评论中台的实际 片键的抉择MongoDB集群中,一个汇合的数据部署是扩散在多个shard分片和chunk中的,而咱们心愿一个评论列表的查问最好只拜访到一个shard分片,因而确定了范畴分片的形式。起初设置只应用单个key作为分片键,以comment评论表举例,次要字段有{"_id":惟一id,"topicId":主题id,"text":文本内容,"createDate":工夫} ,思考到一个主题id的评论尽可能间断散布,咱们设置的分片键为topicId。随着性能测试的染指,咱们发现了有两个十分致命的问题:jumbo chunk问题惟一键问题 jumbo chunk:官网文档中,MongoDB中的chunk大小被限度在了1M-1024M。分片键的值是chunk划分的惟一根据,在数据量继续写入超过chunk size设定值时, MongoDB集群就会主动的进行决裂或迁徙。而对于同一个片键的写入是属于一个chunk,无奈被决裂,就会造成 jumbo chunk问题。举例:若咱们设置1024M为一个chunk的大小,单个document 5KB计算,那么单个chunk可能存储21W左右document。思考热点的主题评论( 如微信评论),评论数可能达到40W+,因而单个chunk很容易超过1024M。超过最大size的chunk仍然可能提供读写服务,只是不会再进行决裂和迁徙,短暂以往会造成集群之间数据的不均衡。 惟一键问题:MongoDB集群的惟一键设置减少了限度,必须是蕴含分片键的;如果_id不是分片键,_id索引只能保障单个shard上的唯一性。You cannot specify a unique constraint on a hashed indexFor a to-be-sharded collection, you cannot shard the collection if the collection has other unique indexesFor an already-sharded collection, you cannot create unique indexes on other fields 因而咱们删除了数据和汇合,调整topicId 和 _id 为联结分片键 从新创立了汇合。这样即突破了chunk size的限度,也解决了唯一性问题。 ...

February 17, 2022 · 1 min · jiezi

关于mongodb:故障分析-MongoDB-50-报错-Illegal-instruction-解决

作者:任仲禹 爱可生 DBA 团队成员,善于故障剖析和性能优化,文章相干技术问题,欢送大家一起探讨。 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 去年七月的一声炮响,MongoDB Inc 给咱们送来了 MongoDB 5.0 ,该版不仅带来了外围个性—时序汇合,但若应用不慎还会给咱们埋些小小的“坑”;如果您的环境正筹备装置、试用或降级到 MongoDB 5.0 ,那无妨留步探讨下。 景象先注明下,我的 Linux 版本为 CentOS Linux release 7.2.1511 。 装置完最新的 mongodb-5.0.x 后,执行 mongo 或 mongod 间接报错 Illegal instruction 。 [root@10-186-61-38 mongodb]# cd mongodb-linux-x86_64-rhel70-5.0.5/bin/[root@10-186-61-38 bin]# ./mongo --helpIllegal instruction[root@10-186-61-38 bin]# ./mongod --helpIllegal instruction满脸纳闷,应用低版本 MongoDB 4.4.9 是没有任何问题的。 [root@10-186-61-38 mongodb]# cd mongodb-linux-x86_64-rhel70-4.4.9/bin/[root@10-186-61-38 bin]# ./mongo --helpMongoDB shell version v4.4.9usage: ./mongo [options] [db address] [file names (ending in .js)]排查执行 mongo 或 mongod 命令获取到2行 demsg 日志报错: ...

February 14, 2022 · 2 min · jiezi

关于mongodb:MongoDB-vs-MySQL哪个效率更高

一、MongoDB批量操作MongoDB对数据的操作分为Read Operations和Write Operations,Read Operations蕴含查问操作,Write Operations蕴含删除、插入、替换、更新几种操作。MongoDB提供客户端用bulk形式执行Write Operations,也就是批量写操作。在java driver中,对应MongoCollection的bulkWrite()办法,先来看下这个办法签名: BulkWriteResult com.mongodb.client.MongoCollection.bulkWrite(List<? extends WriteModel<? extends Document>> requests)这个办法要求传入一个List汇合,汇合中的元素类型为WriteModel,它示意一个可用于批量写操作的基类模型,它有以下几个子类DeleteManyModel、DeleteOneModel、 InsertOneModel、ReplaceOneModel、 UpdateManyModel、UpdateOneModel,从名字能够看进去它对应了删除、插入、替换、更新几种操作。该办法返回一个BulkWriteResult对象,代表一个胜利的批量写操作后果,封装了操作后果的状态信息,如插入、更新、删除记录数等。 1、插入操作(1)、批量插入 代码如下,该办法接管一个蕴含要进行插入的Document对象的汇合参数,遍历汇合,应用Document结构InsertOneModel对象,每个InsertOneModel实例代表一个插入单个Document的操作,而后将该实例增加List汇合中,调用bulkWrite()办法,传入存储所有插入操作的List汇合实现批量插入。 public void bulkWriteInsert(List<Document> documents){ List<WriteModel<Document>> requests = new ArrayList<WriteModel<Document>>(); for (Document document : documents) { //结构插入单个文档的操作模型 InsertOneModel<Document> iom = new InsertOneModel<Document>(document); requests.add(iom); } BulkWriteResult bulkWriteResult = collection.bulkWrite(requests); System.out.println(bulkWriteResult.toString());}测试:上面通过一个main函数测试下。首先结构10万个Product实体对象,应用一个工具类将其转换成json字符串,而后解析成Document对象,保留到一个list汇合中,而后调用下面编写的办法测试10万个对象插入工夫。 TestMongoDB instance = TestMongoDB.getInstance();ArrayList<Document> documents = new ArrayList<Document>();for (int i = 0; i < 100000; i++) { Product product = new Product(i,"书籍","追风筝的人",22.5); //将java对象转换成json字符串 String jsonProduct = JsonParseUtil.getJsonString4JavaPOJO(product); //将json字符串解析成Document对象 Document docProduct = Document.parse(jsonProduct); documents.add(docProduct);} ...

February 14, 2022 · 4 min · jiezi

关于mongodb:mongodb-如何设计表

转自:http://www.cnblogs.com/WeiGe/... Part 1原文:6 Rules of Thumb for MongoDB Schema Design: Part 1 By William Zola, Lead Technical Support Engineer at MongoDB “我有丰盛的sql应用教训,然而我是个MongoDB的初学者。我应该如何在MongoDB中针对一对多关系进行建模?”这是我被问及最多的问题之一。 我没法简略的给出答案,因为这有很多计划去实现。接下来我会教诲你如何针对一对多进行建模。 这个话题有很多内容须要探讨,我会用三个局部进行阐明。在第一局部,我会探讨针对一对多关系建模的三种根底计划。在第二局部我将会笼罩更多高级内容,包含反范式化和双向援用。在最初一部分,我将会回顾各种抉择,并给出做决定时须要思考的因素。 很多初学者认为在MongoDB中针对一对多建模惟一的计划就是在父文档中内嵌一个数组子文档,然而这是不精确的。因为你能够在MongoDB内嵌一个文档不代表你就必须这么做。 当你设计一个MongoDB数据库构造,你须要先问本人一个在应用关系型数据库时不会思考的问题:这个关系中汇合的大小是什么样的规模?你须要意识到一对很少,一对许多,一对十分多,这些轻微的区别。不同的状况下你的建模也将不同。 Basics: Modeling One-to-Few 一对很少针对集体须要保留多个地址进行建模的场景下应用内嵌文档是很适合,能够在person文档中嵌入addresses数组文档: 这种设计具备内嵌文档设计中所有的优缺点。最次要的长处就是不须要独自执行一条语句去获取内嵌的内容。最次要的毛病是你无奈把这些内嵌文档当做独自的实体去拜访。 例如,如果你是在对一个工作跟踪零碎进行建模,每个用户将会被调配若干个工作。内嵌这些工作到用户文档在遇到“查问昨天所有的工作”这样的问题时将会十分艰难。我会在下一篇文章针对这个用例提供一些适当的设计。 Basics: One-to-Many 一对许多以产品整机订货零碎为例。每个商品有数百个可替换的整机,然而不会超过数千个。这个用例很适宜应用间接援用---将整机的objectid作为数组寄存在商品文档中(在这个例子中的ObjectID我应用更加易读的2字节,事实世界中他们可能是由12个字节组成的)。 每个整机都将有他们本人的文档对象 每个产品的文档对象中parts数组中将会寄存多个整机的ObjectID : 在获取特定产品中所有整机,须要一个应用层级别的join 为了能疾速的执行查问,必须确保products.catalog_number有索引。当然因为整机中parts._id肯定是有索引的,所以这也会很高效。 这种援用的形式是对内嵌优缺点的补充。每个整机是个独自的文档,能够很容易的独立去搜寻和更新他们。须要一条独自的语句去获取整机的具体内容是应用这种建模形式须要思考的一个问题(请认真思考这个问题,在第二章反反范式化中,咱们还会探讨这个问题) 这种建模形式中的整机局部能够被多个产品应用,所以在多对多时不须要一张独自的连贯表。 Basics: One-to-Squillions 一对十分多咱们用一个收集各种机器日志的例子来探讨一对十分多的问题。因为每个mongodb的文档有16M的大小限度,所以即便你是存储ObjectID也是不够的。咱们能够应用很经典的解决办法“父级援用”---用一个文档存储主机,在每个日志文档中保留这个主机的ObjectID。 以下是个和第二中计划略微不同的利用级别的join用来查找一台主机最近5000条的日志信息 所以,即便这种简略的探讨也有能察觉出mongobd的建模和关系模型建模的不同之处。你必须要留神一下两个因素: Will the entities on the “N” side of the One-to-N ever need to stand alone? 一对多中的多是否须要一个独自的实体。 What is the cardinality of the relationship: is it one-to-few; one-to-many; or one-to-squillions? ...

February 12, 2022 · 1 min · jiezi

关于mongodb:北亚数据恢复MongoDB数据迁移文件丢失的MongoDB数据恢复案例

MongoDB数据库故障:MongoDB数据库进行数据迁徙,迁徙后提醒:“Windows无奈启动MongoDB服务(位于 本地计算机 上)谬误1067:过程意外终止。”数据库管理员分割北亚数据恢复核心寻求帮忙。 MongoDB数据库数据恢复过程:1、北亚数据恢复工程师通过数据库管理员的形容对故障状况进行初步的理解,并对数据库环境及底层数据进行了查看,发现MongoDB数据库在迁徙过程中因为某些起因失落了_mdb_catalog.wt文件,所以才导致了启动数据库报错。2、本案例的MongoDB数据库数据恢复的关键在于是否在底层数据中找到失落的_mdb_catalog.wt文件。可是通过北亚数据恢复工程师屡次扫描底层数据后,该文件曾经被笼罩。3、北亚数据恢复工程师调整数据恢复策略,因为本案例的数据库是基于WiredTiger存储引擎的数据库系统,在Windows环境下编译出可执行的wt工具。4、北亚数据恢复工程师借助编译后的wt工具对数据库汇合文件内所有数据回写,读取数据后果并写入到文件中。5、北亚数据恢复工程师创立了一个全新的MongoDB数据库,创立相应数据量的汇合,将文件逐个写入汇合中,查问数据集并重建索引信息。6、北亚数据恢复工程师通过查问汇合中的记录,确定记录类型,重建汇合索引,汇合复原实现,能够失常查看其中数据。 MongoDB数据库数据验证:帮助数据库管理员对全副汇合进行索引重建之后,数据库管理员对数据库整体进行查问验证,数据无误。

February 7, 2022 · 1 min · jiezi

关于mongodb:MongoDB学习笔记1NoSQL基础

1.1、NoSQL概念NoSQL并非字面的“不是SQL”或者“非SQL”,而是NoSQL=Not Only SQL,即“不仅仅是SQL”,是对不同于传统的关系型数据库的数据库管理系统的统称。 NoSQL:非关系型、分布式、不提供ACID的数据库设计模式。 NoSAQL用于超大规模数据的存储,这些类型的数据存储不须要固定的模式,无需多余操作就能够横向扩大。 【扩大】ACID的介绍 关系型数据库遵循ACID规定: (1)A (Atomicity) 原子性 原子性很容易了解,也就是说事务里的所有操作要么全副做完,要么都不做,事务胜利的条件是事务里的所有操作都胜利,只有有一个操作失败,整个事务就失败,须要回滚。比方银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起实现,要么一起不实现,如果只实现第一步,第二步失败,钱会莫名其妙少了100元。 (2)C (Consistency) 一致性 一致性也比拟容易了解,也就是说数据库要始终处于统一的状态,事务的运行不会扭转数据库本来的一致性束缚。 (3)I (Isolation) 独立性 所谓的独立性是指并发的事务之间不会相互影响,如果一个事务要拜访的数据正在被另外一个事务批改,只有另外一个事务未提交,它所拜访的数据就不受未提交事务的影响。比方现有有个交易是从A账户转100元至B账户,在这个交易还未实现的状况下,如果此时B查问本人的账户,是看不到新减少的100元的 (4)D (Durability) 持久性 持久性是指一旦事务提交后,它所做的批改将会永恒的保留在数据库上,即便呈现宕机也不会失落。 【扩大】CAP的介绍 C:Consistency(强一致性)A:Availability(可用性)P:Partition tolerance(分区容错性) CAP实践就是说在分布式存储系统中,最多只能实现下面的两点。而因为以后的网络硬件必定会呈现提早丢包等问题,所以在分布式系统中分区容错性是咱们必须须要实现的。所以咱们只能在一致性和可用性之间进行衡量,没有NoSQL零碎能同时保障这三点。 CA:传统Oracle数据库。(单点集群,满足一致性,可用性的零碎,通常在可扩展性上不太强大。) AP: 大多数网站架构的抉择在。(满足可用性,分区容错性的零碎,通常可能对一致性要求低一些。) CP: Redis、Mongodb。(满足一致性,分区容错性的零碎,通常性能不是特地高。) 1.2、为什么应用NoSQL?明天咱们能够通过第三方平台(如:Google,Facebook等)能够很容易的拜访和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志曾经成倍的减少。咱们如果要对这些用户数据进行开掘,那SQL数据库曾经不适宜这些利用了, NoSQL 数据库的倒退却能很好的解决这些大的数据。 因为关系型数据库的范式束缚、事物个性、磁盘IO等特点,若服务器应用关系型数据库,当有大量数据产生时,传统的关系型数据库曾经无奈满足疾速查问与插入数据的需要,NoSQL的呈现解决了这一危机。它通过升高数据的安全性,缩小对事务的反对,缩小对简单查问的反对,获取性能上的晋升,然而,在某些特定场景下NoSQL依然不是最佳抉择,比方一些相对要有事务与平安指标的场景。 具备灵便的数据模型,能够解决非结构化/半结构化的大数据;容易实现可伸缩性(向上扩大与程度扩大);读写性能高(无关系性的数据、数据库构造简略)。当初个别互联网公司,都是关系型数据库与非关系型数据库组合应用。关系型数据库用来做数据的存储与长久化,非关系型数据库用来做内存、缓存,某些场景不须要事务然而频繁读取操作也用到非关系型数据库。 【留神】当初NoSQL没有一个统一标准的,也就是说,每学习一种非关系型数据库,它们里的查问之类的都不一样,这样学习老本就很大了,所以NoSQL这个毛病很大。 1.3、NoSQL数据库四大家族1.3.1、键值(key-value)存储特点:键值数据库就像传统语言中应用的哈希表。通过key增加、查问或者删除数据。长处:查问速度快。毛病:数据无结构化,通常只被当做字符串或者二进制数据存储。利用场景:内容缓存、用户信息,比方会话、配置信息、购物车等,次要用于解决大量数据的高拜访负载。NoSQL代表:Redis(临时性/永久性键值存储)、Memcached(临时性键值存储)、DynamoDB等。1.3.2、文档(Document-Oriented)特点:该类型的数据模型是版本化的文档,半结构化的文档以特定的格局存储,比方json,是一系列数据项的汇合,每个数据项都有一个名称与对应的值,值既能够是简略的数据类型,如字符串、数字和日期等;也能够是简单的类型,如有序列表和关联对象。长处:数据结构要求不严格,表构造可变,不须要像关系型数据库一样须要事后定义表构造。毛病:查问性能不高,不足对立的查问语法。利用场景:日志、Web利用等。NoSQL代表:MongoDB、CouchDB等。1.3.3、列族存储特点:应答分布式存储的海量数据。列存储数据库将数据存储在列表中,将多个列聚合成一个列族,键依然存在,然而它们的特点是指向了多个列。举个例子,如果咱们有一个Person类,咱们通常会一起查问他们的姓名和年龄而不是薪资,这种状况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。长处:列存储查问速度快,可扩展性强,更容易进行分布式扩大,实用于分布式的文件系统,应答分布式存储的海量数据。毛病:查问性能不高,不足对立的查问语法。利用场景:日志、分布式的文件系统(对象存储)、举荐画像、时空数据、音讯/订单等。NoSQL代表:Cassandra、HBase等。1.3.4、图形存储特点:图形数据库容许咱们将数据以图的形式存储,它是应用灵便的图形模型,并且可能扩大到多个服务器上。长处:图形相干算法,比方最短门路寻址,N度关系查找等。毛病:很多时候须要对整个图做计算能力得出须要的信息,分布式的集群计划不好做,解决超级节点乏力,没有分片存储机制,国内社区不沉闷。利用场景:社交网络,举荐零碎等。专一于构建关系图谱。NoSQL代表:Neo4j、Infinite Graph等。1.4、NoSQL优缺点(1)、长处: 高扩展性:像NoSQL数据库(例如Cassandra)能轻松地增加新的节点来扩大这个集群。而关系型数据库存在join这样多表查问机制,使得数据库在扩大方面很艰巨;高可用(读写快):查问效率高,关系型数据库受限于磁盘IO,在高并发状况下压力倍增,而像Redis这种内存数据库每秒反对10W次读写。数据模型灵便:传统关系型数据库都是结构化的表,而NoSQL能够是键值、文档、列族、图形。低成本:开源软件,相比Oracle这种企业受权费用低了不少。(2)、毛病: 没有固定的查问规范,学习老本高;大多数不反对事务(Redis反对,MongoDB不反对);大多数都是初创产品,不够成熟。1.5、数据库管理系统排行依据DB-Engines:https://db-engines.com/en/ran... 的排行,本文截取了排行榜 Top 45 如下图所示。DB-Engines 排名依据数据库管理系统的受欢迎水平对其进行排名。该排名每月更新一次。

February 6, 2022 · 1 min · jiezi

关于mongodb:Mongodb系列二C驱动mongocxx的安装与使用

Mongodb系列(二)——C++驱动mongocxx的装置与应用本文次要介绍如何装置和应用mongodb的C++驱动,mongocxx。官网链接mongocxx、api文档、应用示例。 装置作者应用的是ubuntu20.04操作系统,mongodb版本为4.4.11。 装置C驱动首先下载安装包,链接为https://github.com/mongodb/mo...。 // 进入目录$ cd mongo-c-driver$ mkdir -p build && cd build$ cmake ..$ sudo make && make install装置C++驱动下载安装包,链接为https://github.com/mongodb/mo... $ cd mongo-cxx-driver$ mkdir -p build && cd build$ cmake … -DCMAKE_INSTALL_PREFIX=/usr/local$ make && make install应用这里对立应用cmake来治理包。链接形式如下,在我的项目第一层的CMakeLists.txt文件中加上 find_package(mongocxx REQUIRED)find_package(bsoncxx REQUIRED)include_directories(${LIBMONGOCXX_INCLUDE_DIR})include_directories(${LIBBSONCXX_INCLUDE_DIR})include_directories("/usr/local/include/mongocxx/v_noabi")include_directories("/usr/local/include/bsoncxx/v_noabi")include_directories("/usr/local/include/libmongoc-1.0")include_directories("/usr/local/include/libbson-1.0")include_directories("/usr/local/lib")link_directories( /usr/local/lib/mongocxx/v_noabi /usr/local/lib/bsoncxx/v_noabi)对于咱们要生成的可执行文件所在目录的CMakeLists.txt文件中增加 add_executable(YourTarget main.cpp)target_link_libraries(YourTarget mongo::mongocxx_shared)以上步骤即引入mongocxx胜利。 连贯连贯是通过mongocxx::uri这个类来实现的。代码如下 #include <iostream>#include <bsoncxx/builder/stream/document.hpp>#include <bsoncxx/json.hpp>#include <mongocxx/client.hpp>#include <mongocxx/instance.hpp>#include <mongocxx/cursor.hpp>int main(int argc, char *argv[]){ // 27017是默认端口 mongocxx::uri uri{"mongodb://localhost:27017"}; // 创立一个client客户端 mongocxx::client client = mongocxx::client{uri}; mongocxx::database db = client["db"]; mongocxx::collection coll = db["coll"]; // 抉择了数据库db,表coll}根底增删改查这里简略展现根底的增删改查。须要先构建bson文档对象,能力调用增删改查接口,构建办法有多种,这里简略介绍stream构建形式(其余参考官网)。 ...

February 4, 2022 · 4 min · jiezi

关于mongodb:记一次mongo周期性慢查询问题的定位

问题线上mongodb主库经常出现以5分钟为周期性的慢查问。在排除业务代码bug,机器cpu/io/memory资源限度后。最终发现是mongodb的bug,因为这是一个十分典型的加锁导致的性能不佳问题。故做一下记录。 过程局部业务呈现超时报错局部业务呈现超时报错后,开始定位: 这个超时报错是周期性的,距离是5分钟。mongodb链接数量呈周期性回升。局部申请的rtt在同一个工夫点显著回升。所有高rtt慢查问都呈现在主库,并且集中在一秒内。排除了业务出错的可能性排除业务问题的起因如下: 所有的申请都会呈现慢查问,而这些查问在平时应该在0.5MS左右返回,比方主键齐全命中,collection规模很小,且返回doc不大。在呈现慢查问前后,mongodb业务无变动。因没有秒级监控数据,未在机器层面发现其它异样cpu 的使用率,上下文切换,中断都无异样。disk/network io 无异样。max磁盘使用率在%20以下,等待时间和队列都很低。内存异样变动。减少了专门的告警,抓到秒级的mongotop日志 ns total read write 20XX-XX-XXTXX:XX:06+08:00 XXXXXXXXXXX 432784ms 427448ms 5336ms XXXXXXXXXXX.XXXXXXXXXXX 156077ms 156077ms 0ms XXXXXXXXXXX.XXXXXXXXXXX 123833ms 92224ms 31608ms XXXXXXXXXXX.XXXXXXXXXXX 94543ms 93360ms 1182ms XXXXXXXXXXX.XXXXXXXXXXX 87778ms 83832ms 3945ms XXXXXXXXXXX.XXXXXXXXXXX 48675ms 48635ms 40ms XXXXXXXXXXX.XXXXXXXXXXX 44022ms 44022ms 0ms XXXXXXXXXXX.XXXXXXXXXXX 29715ms 29715ms 0ms XXXXXXXXXXX.XXXXXXXXXXX 20737ms 5445ms 15291ms XXXXXXXXXXX.XXXXXXXXXXX 13962ms 13939ms 22ms mongodb bug在提交工单给阿里云的专家后,正好有人遇到过相似问题,是mongodb的bug。https://github.com/mongodb/mo...很遗憾,因为没有在现场再次查看cpu的秒级中断,上下文切换数据,我未能本人找到这个bug。如果应用vmstat来观测,出问题的那一秒,上下文切换和中断会忽然飙到上一秒的1.8倍左右。和mongotop的异样工夫点齐全吻合。 总结一瞬间的性能问题,须要更高精度的监控数据来定位。留神使用率的陷阱,使用率高不代表肯定过载,使用率低也不代表肯定闲暇。按分钟计算,磁盘使用率为%20,能够是前10秒使用率为%100。后50秒简直齐全闲暇。这个不能阐明磁盘未过载。当然这种状况下的await和读写队列并不会特地低。

January 13, 2022 · 1 min · jiezi

关于mongodb:MongoDB-find-getmore操作慢问题排查

本文来自取得《2021MongoDB技术实际与利用案例征集流动》入围案例奖作品 作者:张家侨 问题形容本文介绍一次帮忙业务排查线上查问操作慢的问题的具体过程以及解决办法。 业务在应用find().limit()命令查问数据时遇到卡顿,一次操作卡最多1分钟,问题形容如下: db.xxx_collection.find({timetag: { $gt: 1636513802167 }, $or: [ { nto: "zhang" }, { nfrom:"zhang" } ], nid: 50, status: 0 }).sort({ timetag: 1 }).limit(200)业务反馈:出问题的MongoDB版本为4.2.12。这个查问从慢日志来看要四五十秒,然而间接跑的话第一批返回数据很快,getmore的时候就慢了,你看下为啥会慢在getmore 从问题形容来看,直观上是getmore造成了查询卡顿,可能起因有如下: getmore操作内核呈现卡顿 -- 内核问题可能性较低 查问打算与被查问数据不匹配 -- 可能性较高 上面问题排查将从这两个次要问题点动手。 问题重现将数据恢复到一个备用集群,而后应用业务的查问进行操作: db.xxx_collection.find({timetag: { $gt: 1636513802167 }, $or: [ { nto: "zhang" }, { nfrom: "zhang" } ], nid: 50, status: 0 }).sort({ timetag:1 }).limit(200)第一次查问立即返回,当获取数据条数到102条时,呈现卡顿。操作产生慢日志,发现是触发了一次getmore操作。日志输入如下: 2021-12-15T10:21:55.007+0800 I COMMAND [conn857] command xxx_db.xxx_collection appName: "MongoDB Shell" command: getMore { getMore: 1244654399487918694, collection: "xxx_collection", planSummary: IXSCAN { timetag: 1 } cursorid:1244654399487918694 keysExamined:11338296 docsExamined:11338296cursorExhausted:1 numYields:88583 nreturned:99 reslen:100170 locks:{ReplicationStateTransition: { acquireCount: { w: 88584 } }, Global: { acquireCount: { r: 88584 } }, Database: { acquireCount: { r: 88584 } }, Collection: { acquireCount: { r: 88584 } }, Mutex: { acquireCount: { r: 1 } } } storage:{ data: { bytesRead: 15442700982, timeReadingMicros: 40865619 },timeWaitingMicros: { cache: 33773 } }protocol:op_msg 65270ms ...

January 12, 2022 · 10 min · jiezi

关于mongodb:multikey索引和wildCard索引场景比较

本文来自取得《2021MongoDB技术实际与利用案例征集流动》优良案例奖作品作者:雷彻 引文MongoDB晚期版本反对multi-key索引,放慢数组检索,很受程序员喜爱;在4.2版本又推出了wildCard索引,反对object和数组检索。这两种索引有相似之处,但在性能上wildCard更弱小。日常工作中,有同学对这两种索引的应用场景比拟含糊,因而在这里抛砖引玉,供大家借鉴。 Multi-key indexmulti-key 反对对数组的高效查问。 举例: db.employee1.insertMany([{"name":"xiaoming","age":25,"ctime":new ISODate(),goodAt:["mongodb","hbase","c++"]},{"name":"xiaohong","age":28,"ctime":newISODate(),goodAt:["es","java","c++"]},{"name":"xiaoguang","age":29,"ctime":newISODate(),goodAt:["mysql","c++","mongodb"]}])--indexdb.employee1.createIndex({goodAt:1})--查找db.employee1.find({"goodAt":"mysql"}) explain的后果中,winningPlan.inputStage.stage为IXSCAN ,走索引goodAt_1。这里字 段"mysql"是一个残缺的数组元素。上面再做两个测试: 侵入查问测试 如果数组元素为json串,不能通过multi-key索引查问某个元素的属性 db.employee1.insertMany([{"name":"a","age":25,"ctime":new ISODate(),"goodAt":[ {database:"mysql", lang:"c++"}, {database:"hbase",lang:"java"}, {database:"tidb",lang:"golang"} ]}])--截取json属性,不反对;db.employee1.find({"goodAt":{"database":"mysql"}}).explain() /**走索引,后果为空,没有满足条件的元素**/db.employee1.find({"goodAt":{"database":"mysql", "lang" : "c++" }}).explain() /**走索引,后果不为空**倡议应用如下写法: --递归db.employee1.find({"goodAt.database":"mysql"}).explain() /**不走索引,后果不为空**/ 如果要查问database字段,只能对 goodAt.database 加索引 db.employee1.createIndex({"goodAt.database":1})db.employee1.find({"goodAt.database":"mysql"}).explain() /**走索引,后果不为空**/ tips: multi-key实用于对数组进行索引 不能对数组进行哈希 不反对对嵌套的对象进行查问; WildCard index在上文中,查问数组元素某个字段,就须要对字段独自加索引,用起来很不不便。在MongoDB4.2版本引入了wildCard索引,反对对象,数组的检索,并且能够侵入元素外部遍历,十分不便。 多属性汇合,ok:{k1:v1,k2:v2},对ok建索引 举例: db.employee2.insertMany([{"name":"xiaoming","age":25,"ctime":new ISODate(),"goodAt":{"database":["mongodb","hbase"],"programLanguage":"c++"}},{"name":"xiaohong","age":28,此时尚未建索引,查问goodAt某个属性,能够看到stage为COLLSCAN增加wildCard索引后"ctime":new ISODate(),"goodAt":{"database":"mysql","programLanguage":"java","middleAware":"zookeeper"}},{"name":"xiaoguang","age":29,"ctime":new ISODate(),"goodAt":{"database":"mongodb","programLanguage":"python","web":"nodejs"}}])此时尚未建索引,查问goodAt某个属性,能够看到stage为COLLSCAN db.employee2.find({"goodAt.database": "mysql"}).explain() 增加wildCard索引后 --对goodAt建索引db.employee2.createIndex({ "goodAt.$**": 1 })db.employee2.find({"goodAt.database": "mongodb"}).explain() 在元素"name":"xiaoming"中,goodAt.database字段的值为数组,咱们看看是否走索引匹配 db.employee2.find({"goodAt.database": "mongodb"}).explain() wildCard索引也反对一个multi-key索引,能够对其中的数组元素进行索引匹配。 侵入查问测试 进一步在wildCard索引中的数组元素下,增加对象,是否走索引?咱们在goodAt.database属性中,减少数组属性,做属下测试,指标是确认wildCard是否在数组中递归; db.employees2.insert({"name":"xiaohong1","age":29,"ctime":new ISODate(),"goodAt":{"database":[{"rdb":"mysql"}, {"nosql":["mongodb","redis"]}, {"newsql":"tidb"} ],"programLanguage":"go" }})db.employee2.find({"goodAt.database.nosql": "mongodb"}).explain() 显然,wildCard索引反对对数组元素中的检索。 db.employees2.insert({"name":"a","age":29,"ctime":new ISODate(),"goodAt":{"database":{"rdb":"mysql","nosql":"mongodb","newsql":"tidb"},"programLanguage":"go" }})db.employee2.find({"goodAt.database.nosql": 1}).explain() ...

January 12, 2022 · 1 min · jiezi

关于mongodb:MongoDB白皮书DIRT和复杂性的高成本

整整 70% 的数字化转型倡导都未能实现其指标。技术、文化和流程等多种因素妨碍了团队的翻新尝试。在与数千家组织(包含《财产》100 强客户、大型公共机构和尖端初创公司)单干后,咱们发现翻新中最艰难的局部往往在于应用数据来构建和改良应用程序。 随着古代应用程序数据需要变得越来越简单,应用传统数据架构反对这些需要变得越来越具备挑战性。通常,解决方案是增加一种新的数据技术,为其环境带来更多的复杂性。 这成为了构建应用程序和更宽泛翻新的累赘。在这种极其常见的情景中,工夫和资源都节约在保护简单、软弱的架构的需要上,而这些资源可用于开发客户会青睐的新产品和性能。这种不必要的简单数据架构变成一种翻新税⸺数据与翻新经常性税项,咱们称之为 DIRT。 在本文中,咱们将展现这么多组织最终如何缴纳这笔税款,摸索数据架构无序扩大的苦楚影响,并提出一个可能的解决方案⸺以现代化的利用程序开发数据平台,治理开发利用的多种数据需要。 扫描下方二维码,实现注册,即可下载白皮书,深刻理解DIRT和复杂性的高老本。 下载白皮书《DIRT和复杂性的高老本》,理解详情。 https://www.mongodb.com/collateral/dirt-and-cost-of-complexity-sc (复制上方链接至浏览器关上)

January 6, 2022 · 1 min · jiezi

关于mongodb:纯-MongoDB-实现中文全文搜索

摘要MongoDB在2.4版中引入全文索引后几经迭代更新曾经比拟完满地反对以空格分隔的西语,但始终不反对中日韩等语言,社区版用户不得不通过挂接ElasticSearch等反对中文全文搜寻的数据库来实现业务需要,由此引入了许多业务限度、平安问题、性能问题和技术复杂性。作者独辟蹊径,基于纯MongoDB社区版(v4.x和v5.0)实现中文全文搜寻,在靠近四千万个记录的商品表搜寻商品名,检索工夫在200ms以内,并应用Change Streams技术同步数据变动,满足了业务须要和用户体验需要。 本文首先形容遇到的业务需要和艰难,介绍了MongoDB和Atlas Search对全文搜寻的反对现状,而后从全文搜寻原理讲起,联合MongoDB全文搜寻实现,挂接中文分词程序,达到纯MongoDB社区版实现中文全文搜寻的指标;针对性能需求,从分词、组合文本索引、用户体验、实时性等多方面给出了优化实际,使整个计划达到商业级的实用性。 业务需要和艰难电商易是作者公司的电商大数据工具品牌,旗下多个产品都有搜寻商品的业务需要。晚期的时候,咱们的搜寻是间接用$regex去匹配的,在数据量比拟大的时候,须要耗时十几秒甚至几分钟,所以用户总是反馈说搜不出货色来。其实不是搜不进去,而是搜的工夫太长,服务器掐断连贯了。加上咱们广泛应用极简格调的首页,像搜索引擎那样,有个框,右侧是一个“一键剖析”的按钮,用户点击后显示相干的商品的数据。搜寻成为用户最罕用的性能,搜寻性能的问题也就变得更加突出了,优化搜寻成为了火烧眉毛的工作。 MongoDB在2.4版中引入文本索引(Text Index)实现了全文搜寻(Full Text Search,下文简称FTS),尽管起初在2.6和3.2版本中两经改版优化,但始终不反对中日韩等语言。MongoDB官网推出服务Atlas Search,也是通过外挂Lucene的形式反对的,这个服务须要付费,而且未在中国大陆地区经营,与咱们无缘,所以还是要寻找本人的解决之道。 那么是否仅仅基于MongoDB社区版实现中文全文搜寻呢?带着这个问题,作者深刻到MongoDB文本索引的文档、代码中去,发现了些许端倪,并逐渐实现和优化了纯MongoDB实现中文全文搜寻的计划,下文将从全文搜寻的原理讲起,详细描述这个计划。 过程全文搜寻原理 倒排索引是搜寻引警的根底。倒排是与正排绝对的,假如有一个 ID 为 1 的文档,内容为“ My name is LaiYonghao.“,那么通过 ID 1 总能找到这个文档所有的词。通过文档 ID 找蕴含的词,称为正排;反过来通过词找到包含该词的文档 ID,称为倒排,词与文档ID的对应关系称为倒排索引。上面间接援用一下维基百科上的例子。 0 "it is what it is"1 "what is it"2 "it is a banana" 下面 3 个文档的倒排索引大略如下: "a": {2} "banana": {2} "is": {0, 1, 2} "it": {0, 1, 2} "what": {0, 1} 这时如果要搜寻banana的话,利用倒排索引能够马上查找到包含这个词的文档是ID为2的文档。而正排的话,只能一个一个文档找过来,找完3个文档能力找到(也就是$regex的形式),这种状况下的耗时大部分是无奈承受的。 倒排索引是所有反对全文搜寻的数据库的根底,无论是PostgreSQL还是MySQL都是用它来实现全文搜寻的,MongoDB也不例外,这也是咱们最终解决问题的根底底座。简略来说,倒排索引相似MongoDB里的多键索引(Multikey Index),可能通过内容元素找到对应的文档。文本索引能够简略类比为对字符串宰割(即分词)转换为由词组成的数组,并建设多键索引。尽管文本索引还是进行词、同义词、大小写、权重和地位等信息须要解决,但大抵如此了解是能够的。 西文的分词较为简单,基本上是按空格分切即可,这就是MongoDB内置的默认分词器:当建设文本索引时,默认分词器将按空格分切句子。而CJK语言并不应用空格切分,而且最小单位是字,所以没有方法间接利用MongoDB的全文搜寻。那么如果咱们事后将中文句子进行分词,并用空格分隔从新组装为“句子”,不就能够利用上MongoDB的全文搜寻性能了吗?通过这一个突破点进行深挖,试验证实,这是可行的,由此咱们的问题就转化为了分词问题。 一元分词和二元分词 从上文可知,数据库的全文搜寻是基于空格切分的词作为最小单位实现的。中文分词的办法有很多,最根底的是一元分词和二元分词。 所谓一元分词:就是一个字一个字地切分,把字当成词。如我爱北京天安门,能够切分为我爱北京天安门,这是最简略的分词办法。这种办法带来的问题就是文档过于集中,罕用汉字只有几千个,权且算作一万个,如果有一千万个文档,每一个字会对应到10000000/10000*avg_len(doc)个。以文档内容是电商平台的商品名字为例,均匀长度约为 60 个汉字,那每一个汉子对应 6 万个文档,用北京两字搜寻的话,要求两个长度为6万的汇合的交加,就会要很久的工夫。所以大家更常应用二元分词法。 ...

January 6, 2022 · 2 min · jiezi

关于mongodb:MongoDB学习笔记MongoDB索引那点事

作者: 幻好 起源:恒生LIGHT云社区 MongoDB索引索引通常可能极大的进步查问的效率,如果没有索引,MongoDB 在读取数据时必须扫描汇合中的每个文件并选取那些合乎查问条件的记录。 这种扫描全汇合的查问效率是非常低的,特地在解决大量的数据时,查问能够要花费几十秒甚至几分钟,这对网站的性能是十分致命的。索引是非凡的数据结构,索引存储在一个易于遍历读取的数据汇合中,索引是对数据库表中一列或多列的值进行排序的一种构造。 索引罕用操作查看汇合索引db.collection.getIndexes()查看汇合索引大小db.collection.totalIndexSize()删除汇合所有索引db.collection.dropIndexes()删除汇合指定索引db.collection.dropIndex("索引名称")索引的类型在 MongoDB 4.x 版本中反对以下类型的索引: 单字段索引单键索引不会主动创立,是最一般的索引。通过给某一字段加索引,并依照指定规定进行排序。但实际上,在波及单字段索引的排序查问中,索引键的排序规定是无关紧要,因为 MongoDB 反对在任一方向上遍历索引。 db.collection.find({}).sort( {key_name:-1})db.collection.find({}).sort( {key_name:1})以后大多数数据库都反对双向遍历索引,这和存储构造无关 (如下图)。在 B-Tree 构造的叶子节点上,存储了索引键的值及其对应文档的地位信息,而每个叶子节点间则相似于双向链表,既能够从前往后遍历,也能够从后往前遍历。 复合索引反对为多个字段创立索引,示例如下: db.collection.createIndex( { name: -1,birthday: 1} )须要留神的是 MongoDB 的复合索引具备前缀索引的特色,即如果你创立了索引 { a:1, b: 1, c: 1, d: 1 },那么等价于在该汇合上还存在了以下三个索引,这三个隐式索引同样能够用于优化查问和排序操作: { a: 1 }{ a: 1, b: 1 }{ a: 1, b: 1, c: 1 }所以应该尽量避免创立冗余的索引,冗余索引会导致额定的性能开销。即如果你创立了索引 { name: -1, birthday: 1},那么再创立 {name:-1} 索引,就属于冗余创立。 对于复合索引还须要留神它在排序上的限度,例如索引 {a:1, b:-1} 反对 {a:1, b:-1} 和 {a:-1, b:1} 模式的排序查问,但不反对 {a: - 1, b:-1} 或 {a:1, b:1} 的排序查问。即字段的排序规定要么与索引键的排序规定完全相同,要么齐全相同,此时能力进行双向遍历查找。 ...

January 5, 2022 · 1 min · jiezi

关于mongodb:MongoDB按需物化视图介绍

留神 本页的内容探讨了按需物化视图。无关视图的探讨,请参阅视图。 从4.2版本开始,MongoDB为aggregation pipeline增加了$merge阶段。此阶段能够将管道后果合并到现有汇合中,而不是齐全替换现有汇合。此性能容许用户创立按需物化视图,每次运行管道时都能够更新输入汇合的内容。 示例假如当初靠近2019年1月末,汇合bakesales蕴含按我的项目分类的销售信息: db.bakesales.insertMany( [ { date: new ISODate("2018-12-01"), item: "Cake - Chocolate", quantity: 2, amount: new NumberDecimal("60") }, { date: new ISODate("2018-12-02"), item: "Cake - Peanut Butter", quantity: 5, amount: new NumberDecimal("90") }, { date: new ISODate("2018-12-02"), item: "Cake - Red Velvet", quantity: 10, amount: new NumberDecimal("200") }, { date: new ISODate("2018-12-04"), item: "Cookies - Chocolate Chip", quantity: 20, amount: new NumberDecimal("80") }, { date: new ISODate("2018-12-04"), item: "Cake - Peanut Butter", quantity: 1, amount: new NumberDecimal("16") }, { date: new ISODate("2018-12-05"), item: "Pie - Key Lime", quantity: 3, amount: new NumberDecimal("60") }, { date: new ISODate("2019-01-25"), item: "Cake - Chocolate", quantity: 2, amount: new NumberDecimal("60") }, { date: new ISODate("2019-01-25"), item: "Cake - Peanut Butter", quantity: 1, amount: new NumberDecimal("16") }, { date: new ISODate("2019-01-26"), item: "Cake - Red Velvet", quantity: 5, amount: new NumberDecimal("100") }, { date: new ISODate("2019-01-26"), item: "Cookies - Chocolate Chip", quantity: 12, amount: new NumberDecimal("48") }, { date: new ISODate("2019-01-26"), item: "Cake - Carrot", quantity: 2, amount: new NumberDecimal("36") }, { date: new ISODate("2019-01-26"), item: "Cake - Red Velvet", quantity: 5, amount: new NumberDecimal("100") }, { date: new ISODate("2019-01-27"), item: "Pie - Chocolate Cream", quantity: 1, amount: new NumberDecimal("20") }, { date: new ISODate("2019-01-27"), item: "Cake - Peanut Butter", quantity: 5, amount: new NumberDecimal("80") }, { date: new ISODate("2019-01-27"), item: "Tarts - Apple", quantity: 3, amount: new NumberDecimal("12") }, { date: new ISODate("2019-01-27"), item: "Cookies - Chocolate Chip", quantity: 12, amount: new NumberDecimal("48") }, { date: new ISODate("2019-01-27"), item: "Cake - Carrot", quantity: 5, amount: new NumberDecimal("36") }, { date: new ISODate("2019-01-27"), item: "Cake - Red Velvet", quantity: 5, amount: new NumberDecimal("100") }, { date: new ISODate("2019-01-28"), item: "Cookies - Chocolate Chip", quantity: 20, amount: new NumberDecimal("80") }, { date: new ISODate("2019-01-28"), item: "Pie - Key Lime", quantity: 3, amount: new NumberDecimal("60") }, { date: new ISODate("2019-01-28"), item: "Cake - Red Velvet", quantity: 5, amount: new NumberDecimal("100") },] );定义按需物化视图上面的updateMonthlySales函数定义了一个monthlybakesales物化视图,其中蕴含累积的每月销售信息。在示例中,该函数采纳了一个日期参数来更新从特定日期开始的每月销售信息。 ...

December 30, 2021 · 3 min · jiezi

关于mongodb:2021MongoDB技术实践与应用案例征集活动获奖通知

MongoDB中文社区携手MongoDB官网和Tapdata发展MongoDB技术实际与利用案例征集流动圆满结束。咱们从创新性和利用价值的维度进行评比,评出本次案例征集流动最佳翻新案例和优良利用案例。 上面是获奖名单,祝贺获奖的各位朋友!接下来咱们也会在社区平台上分享局部案例,以飨读者。 最佳利用案例奖: 《纯MongoDB实现中文全文搜寻》作者:赖勇浩 最佳优良案例奖: 《multi-key和wildCard索引场景比拟》作者:雷彻 《MongoDB运维治理-WireTiger数据恢复》作者:杨美泉 《MongoDB在vivo评论中台的利用案例》作者:vivo互联网技术 入围案例奖: 《中国航空工业倒退钻研核心信息资源共享建设的实际》作者:张先明 《MongoDB find getmore操作慢问题排查》作者:张家侨 《mongo集群分片update不平均案例一则》作者:任坤 感激MongoDB官网和Tapdata对本次案例征集流动的大力支持! 流动主办方 MongoDB中文社区( Mongoing.com)成立于2014年,是大中华区取得官网认可的中文社区,通过社区志愿者们的一直致力,目前曾经有超过2万的线上及线下成员。中文社区由博客、线下流动、技术问答、社群、官网文档翻译等版块组成。截至2020年社区已胜利举办数十场人数超百的线下流动,发表对于MongoDB利用优质文章数百篇,相干单干单位已达20多家。中文社区的愿景是:为宽广MongoDB中文爱好者创立一个沉闷的互助平台;推广MongoDB成为企业数据库利用的首选计划;汇集 MongoDB开发、数据库、运维专家,打造最权威的技术社区。 Mongoing中文社区公众号: mongoing – mongoing Mongoing中文社区http://mongoing.com/ 资助搭档 MongoDB是寰球当先的古代通用数据平台,旨在助力开发人员及其构建的应用程序开释软件和数据的潜能,总部位于纽约,在寰球40多个办公室中领有超过2,100名员工。MongoDB有20,200余家客户遍布寰球100多个国家和地区,并领有18,000名Atlas客户和超过2,000,000名Atlas收费用户。MongoDB数据库平台已下载超过1.25亿次,MongoDB大学寰球注册用户累计已超过150万人。MongoDB官网 https://www.mongodb.com/ Tapdata,是基于MongoDB 的实时ETL及数据服务平台工具。咱们的产品可能帮忙那些不足业余数据工程师的企业提供产品化的数据解决方案。实时双向的数据同步+简略的数据治理及建模+无代码API服务式交付+百TB级亚秒级的性能,无论您是为您客户构建数据对立平台,还是构建一个横跨BU的企业级数据中台,Tapdata都能够为你提供更低成本疾速落地的一个无效技术计划。 钛铂数据(Tapdata)官网 https://tapdata.net/

December 30, 2021 · 1 min · jiezi

关于mongodb:为什么-MongoDB-使用-B-树

概述MongoDB 是一个通用的、面向文档的分布式数据库,这是官网对 MongoDB 介绍。区别于传统的关系型数据库 MySQL、Oracle 和 SQL Server,MongoDB 最重要的一个特点就是『面向文档』,因为数据存储形式的不同,对外提供的接口不再是被大家熟知的 SQL,所以被划分成了 NoSQL,NoSQL 是绝对 SQL 而言的,很多咱们耳熟能详的存储系统都被划分成了 NoSQL,例如:Redis、DynamoDB和Elasticsearch等。 sql-and-nosqNoSQL 常常被了解成没有 SQL(Non-SQL)或者非关系型(Non-Relational),不过也有人将其了解成不只是 SQL(Not Only SQL),深挖这个词的含意和起源可能没有太多意义,这种二次解读很多时候都是为营销服务的,咱们只须要晓得 MongoDB 对数据的存储形式与传统的关系型数据库齐全不同。 MongoDB 的架构与 MySQL 十分相似,它们底层都应用了可插拔的存储引擎以满足用户的不同需要,用户能够依据数据特征选择不同的存储引擎,最新版本的 MongoDB 应用了 WiredTiger 作为默认的存储引擎。 mongodb-architecture作为 MongoDB 默认的存储引擎,WiredTiger 应用 B 树作为索引底层的数据结构,然而除了 B 树之外,它还反对 LSM 树作为可选的底层存储构造,LSM 树的全称是 Log-structured merge-tree,你能够在 MongoDB 中应用如下所示的命令创立一个基于 LSM 树的汇合(Collection): db.createCollection( "posts", { storageEngine: { wiredTiger: {configString: "type=lsm"}}} )咱们在前端培训这篇文章中不仅会介绍 MongoDB 的默认存储引擎 WiredTiger 为什么抉择应用 B 树而不是 B+ 树,还会对 B 树和 LSM 树之间的性能和利用场景进行比拟,帮忙各位读者更全面地了解明天的问题。 ...

December 30, 2021 · 2 min · jiezi

关于mongodb:当游戏爱上MongoDB–参会赢Kindle

始于 2019 年底的新冠疫情扭转了咱们的生存形式,游戏成为了很多人排遣寂寞的一种形式,由此带来了游戏市场的异样火爆。游戏市场比拼的是谁能更疾速地开发迭代,让玩家体验更佳,因而可能麻利开发、疾速扩大、寰球部署和轻运维的数据库产品无疑将为游戏的开发和前期经营奠定良好的根底。 诚邀您与MongoDB、阿里云数据库专家团队,以及游戏行业同行独特探讨如何应用MongoDB 帮您打造全球化高效、易用、稳固的数据库架构,并为您具体解读 MongoDB 5.0 新个性在游戏行业的最佳实际。 工夫:12月23日14:00-15:30 模式:阿里云社区线上直播 咱们将从所有上线并填写问卷的与会者中随机抽取侥幸观众一位,送出Kindle一台! 填写考察问卷并预约报名 可取得精美小礼品! 扫描上方二维码即可报名/进入直播间!

December 22, 2021 · 1 min · jiezi

关于mongodb:叮咚买菜自建MongoDB上云实践

随着近年来私有云技术及云基础设施的倒退,越来越多的企业转为应用私有云来托管本人的服务。云数据库因为数据可靠性、资源弹性、运维便捷行,云上数据库服务也正成为企业数据管理的较好的抉择。 本文以叮咚买菜自建MongoDB数据库整体迁徙上腾讯云MongoDB为背景,分享叮咚买菜上云过程中的遇到的疑难问题及对应的性能优化解决办法等,次要包含以下分享内容: 云上MongoDB版本选型 平安上云及切换计划 叮咚买菜业务侧性能优化 上云遇到的疑难问题及解决办法 自建上云收益 1.叮咚买菜自建MongoDB上云背景叮咚买菜业务以生鲜即时配送为外围,兼备新批发电商和生鲜供应链的特点,对高并发和数据一致性有硬性要求。在疾速扩张的过程中,很多服务技术选型以MongoDB作为其次要数据存储。相比其余非即时业务场景,叮咚买菜对数据库拜访时延、稳定性、数据一致性、数据安全性也有更刻薄的要求。 借助腾讯云MongoDB产品欠缺的自动化运维、数据安全备份回档、云弹性等能力,能够疾速补齐叮咚买菜的外围MongoDB数据库根底技术能力,确保数据团队能够熟能生巧的撑持业务开发。 叮咚数据团队基于自建成本、物理资源有余等起因,通过综合评估,决定把MongoDB数据迁徙到腾讯云MongoDB上。 2.云上版本举荐及切换计划业务正式开始迁徙前,联合叮咚DBA和业务同学理解具体场景、MongoDB集群部署形式、业务MongoDB用法、内核版本、客户端版本、客户端driver类型等。提前理解到用户第一手信息:自建MongoDB版本较低 客户端driver次要包含java和PHP 集群部署都带tag 集群存在较频繁的抖动问题 2.1. 腾讯云MongoDB内核版本举荐叮咚自建MongoDB因历史起因统一放弃在官网MongoDB-3.2版本,在一些场景存在性能瓶颈,例如用户主从读写拆散时候会遇到读超时等问题。思考到用户对性能要求较高,同时联合以下技术点,最终举荐用户应用腾讯云MongoDB-4.0版本,次要起因如下: 非阻塞从节点读(叮咚买菜遇到的低版本次要问题) MongoDB-4.x开始,引入了非阻塞的从节点读(Non-Blocking Secondary Reads),彻底解决了3.x版本从节点批量重放oplog时候加全局ParallelBatchWriterMode类型MODE_X锁引起的读从节点读阻塞问题。 存储引擎优化(低版本的次要问题) 相比3.2版本,4.0对存储引擎做了很多优化,例如cache脏数据淘汰、锁粒度、更全的引擎参数调整反对等,极大的解决了低版本后盾加索引、大流量读写等引起的客户端拜访阻塞问题。 更好的写性能 相比3.2版本,除了下面提到的非阻塞从节点读引起的读性能晋升外,在写性能方面4.0也更有劣势。 更多有用新性能 通过几个大版本迭代,4.0版本相比3.2新增了十分多有用性能,例如Retryable Writes(可重试写)、Change Streams(变更流操作)、Tunable Consistency(更强的可调一致性)、Schema Validation(模式查看)、平安性能加强、事务反对、更丰盛的操作类型等。 分片模式集群扩容balance效率更高 4.0版本相比3.2版本,减少分片扩容后的数据迁徙采纳更好的并发迁徙策略,扩容数据迁徙速率更高。 为何不抉择更高的MongoDB版本 MongoDB版本越高性能越多,例如更高版本反对分布式事务、多字段hash片建反对等。因为叮咚次要是正本集集群,并且对这些新性能需要不强烈,同时综合集群稳定性思考,最终抉择4.0版本。 客户端driver版本兼容性,缩小用户客户端革新老本 因为内核版本较低,如果降级到高版本,首先须要思考对应客户端driver版本是否兼容低版本driver。如果客户端版本和内核不兼容,则须要进行driver降级甚至代码革新,因而客户端driver兼容性也是MongoDB内核版本抉择的一个要害指标。叮咚技术团队通过验证,确认客户端版本齐全兼容4.0内核,代码无需任何革新。 罕用客户端driver与MongoDB内核版本兼容性详见: Driver类型 官网兼容性阐明 Java https://docs.mongodb.com/driv... golang https://docs.mongodb.com/driv... php https://docs.mongodb.com/driv... 其余 https://docs.mongodb.com/driv... 2.2. 平安上云迁徙计划叮咚自建MongoDB集群蕴含局部重要数据,务必保障迁徙的数据一致性。罕用通用迁徙计划如下: 通用迁徙计划 下面的迁徙计划步骤如下: 步骤1:腾讯云DTS for MongoDB全量+增量形式实时同步自建数据到云上MongoDB 步骤2:抉择凌晨业务低峰期判断DTS提早进度,提早追上后,业务停写 步骤3:确保源集群最初一条oplog同步到指标集群,客户端IP地址切到指标集群 通过下面的操作步骤,最终实现不同版本的MongoDB上云。然而,该上云计划有个危险,假如业务切换到指标新集群后局部读写有问题,这时候就须要回滚到源自建集群。因为切换到新集群过程后,可能局部写流量到了指标集群,这时候指标集群相比源集群就会有更多的数据。这时候,切回到源集群后,也存在数据不统一的状况,即便把指标集群增量oplog回写到源集群,也可能存在乱序写入引起的数据凌乱问题。 优化计划 为了解决极其状况下回滚引起的数据失落、数据凌乱、数据不统一等问题,叮咚业务集群采纳如下更加平安可回滚切割计划: 当业务流量从源叮咚自建MongoDB-3.2集群切换到腾讯云MongoDB-4.0后,如果存在版本兼容、业务拜访异样等问题,则可间接回滚到腾讯云MongoDB-3.2版本,因为回滚集群和源自建集群版本统一,并且通过DTS实时同步,因而,能够肯定水平保障回滚流程数据不凌乱、不抵触、不失落,也可保障切割出问题时候的疾速回滚。 因为叮咚业务MongoDB存储了局部重要数据,不容许数据失落及凌乱,对数据一致性要求极高。以后计划在切换过程中,仍存在向前回滚时数据提早、连贯串更换后利用写错等危险。因而为了确保实时同步及回滚数据一致性十拿九稳,除了DTS的回滚计划,叮咚在业务侧减少了几层爱护:通过订阅和扫描,针对外围库的数据进行校验;通过流量检测进行业务反查;如果呈现业务数据不统一,能够通过工具进行可灰度、可控速的形式进行补齐。 3.叮咚自建MongoDB上云遇到的问题及优化解决办法叮咚不同业务从3.2版本上云降级到4.0版本过程中,遇到了一些性能瓶颈问题,次要包含以下问题: 腾讯云MongoDB短链接性能优化 叮咚业务侧短链接优化 Session定期刷新引起的集群抖动问题 3.1.短链接性能优化解决办法以叮咚集群其中某业务为例,该业务局部接口应用PHP driver,因而会波及到大量的MongoDB短链接拜访,以下别离阐明叮咚自建集群短链接瓶颈优化及腾讯云MongoDB短链接优化过程。 ...

December 22, 2021 · 3 min · jiezi

关于mongodb:MongoDB学习笔记使用-MongoDB-进行-CRUD-操作下

作者:幻好 起源:恒生LIGHT云社区 概述MongoDB 是一种长久化的面向文档的数据库,用于以文档的模式存储和解决数据。 与其余的数据库管理系统一样,MongoDB 能够通过四种根本类型的数据操作来治理数据并与数据交互: C:创立操作,波及将数据写入数据库R:读取操作,查询数据库以从中检索数据U:更新操作,更改数据库中已存在的数据D:删除操作,从数据库中永恒删除数据以上四种操作统称为 CRUD 操作,本文次要解说这四种操作的原理和命令等相干常识。 具体操作更新文档接下来重点介绍如何通过更改单个文档中的字段值,以及向汇合中的每个文档增加新字段来更新现有文档。 与 insertOne() 和 insertMany() 办法相似,MongoDB 提供了能够一次更新单个文档或多个文档的办法。 为容许用户执行此操作,MongoDB 在更新办法中应用与在查找和检索文档的查问过滤器文档机制雷同的查问过滤器文档机制。任何可用于检索文档的查问过滤器文档也可用于指定要更新的文档。 updateOne通过将景点 长城 的名称更改为 Chuangcheng 的全名。为此,请应用更新单个文档的 updateOne() 办法: db.spots.updateOne( { "name": "长城" }, { $set: { "name": "Chuangcheng" } })# 输入:{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }updateOne 办法的第一个参数是具备单个相等条件的查问过滤器文档,如上一步所述。在此示例中,{ "name": "长城" } 查找名称键为 长城 值的文档。此处能够应用任何无效的查问过滤器文档。 第二个参数是更新文档,指定在更新期间应该利用哪些更改。更新文档由作为键的更新操作符和作为值的每个操作符的参数组成。在此示例中,应用的更新运算符是 $set。它负责将文档字段设置为新值,并须要一个具备新字段值的 JSON 对象。在这里, $set: { "name": "Chuangcheng" } 通知 MongoDB 将字段名称的值设置为 Chuangcheng。 而后查看更新是否无效: ...

December 22, 2021 · 2 min · jiezi

关于mongodb:MongoDB学习之丰富的索引

MongoDB的索引和MySql的索引的作用和优化要遵循的准则根本类似,MySql索引类型根本能够辨别为: 单键索引 - 联结索引主键索引(聚簇索引) - 非主键索引(非聚簇索引)在MongoDB中除了这些根底的分类之外,还有一些非凡的索引类型,如: 数组索引 | 稠密索引 | 天文空间索引 | TTL索引等. 为了上面不便测试咱们应用脚本插入以下数据 for(var i = 0;i < 100000;i++){ db.users.insertOne({ username: "user"+i, age: Math.random() * 100, sex: i % 2, phone: 18468150001+i });}单键索引单键索引即索引的字段只有一个,是最根底的索引形式. 在汇合中应用username字段,创立一个单键索引,MongoDB会主动将这个索引命名为username_1 db.users.createIndex({username:1})'username_1'在创立索引后查看一下应用username字段的查问打算,stage为IXSCAN代表应用应用了索引扫描 db.users.find({username:"user40001"}).explain(){ queryPlanner: { winningPlan: { ...... stage: 'FETCH', inputStage: { stage: 'IXSCAN', keyPattern: { username: 1 }, indexName: 'username_1', ...... } } rejectedPlans: [] , }, ...... ok: 1 } 在索引优化的准则当中,有很重要的准则就是索引要建设在基数高的的字段上,所谓基数就是一个字段上不反复数值的个数,即咱们在创立users汇合时年龄呈现的数值是0-99那么age这个字段将会有100个不反复的数值,即age字段的基数为100,而sex这个字段只会呈现0 | 1这个两个值,即sex字段的根底是2,这是一个相当低的基数,在这种状况下,索引的效率并不高并且会导致索引生效. ...

December 21, 2021 · 3 min · jiezi

关于mongodb:MongoDB学习笔记MongoDB-快速入门

作者:幻好 起源:恒生LIGHT云社区 前言当初大多数企业级计算机系统,通过关系型数据库(RDMBS)来存储数据。而在某些业务场景中须要零碎可能更快的响应,因为对关系数据库性能的思考,须要通过更好的计划对其进行优化,于是就有人提出了非关系型数据库的概念(NoSQL)。 NoSQL 是一项全新的数据库革命性静止,用于超大规模数据的存储。(例如谷歌或 Facebook 每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不须要固定的模式,无需多余操作就能够横向扩大。 MongoDB 是一个功能丰富的 NoSQL 数据库,本文整顿了它最罕用的局部造成了这篇入门教程,心愿对大家有所帮忙。 基本概念MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写,旨在为 WEB 利用提供可扩大的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中性能最丰盛,最像关系数据库的数据库。 MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档相似于 JSON 对象。字段值能够蕴含其余文档,数组及文档数组。 { "name": "JacK", "class": "一班", "age": 19,}次要特点MongoDB 反对各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。Mongo 反对丰盛的查问表达式。查问指令应用JSON模式的标记,可轻易查问文档中内嵌的对象及数组。Mongodb 中的Map/reduce次要是用来对数据进行批量解决和聚合操作。MongoDB 容许在服务端执行脚本,能够用Javascript编写某个函数,间接在服务端执行,也能够把函数的定义存储在服务端,下次间接调用即可。MongoDB 提供了一个面向文档存储,操作起来比较简单和容易。MongoDB 能够在记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。利用场景服务的日志记录,日常咱们会把一些利用日志存储到文本格式的文件中,这样不便于查看同时也不便于统计等。通过MongoDB存储,既能够很好的存储、统计同时也不便不同的业务场景下日志数据格式不统一等状况。爬虫信息抓取与存储,咱们在一些业务场景中难免会去应用到第三方的数据,当接入多个第三方平台时,这时候咱们须要思考到每个平台数据格式不统一,本身的存储系统结构设计等状况。这时候咱们应用MongoDB来存储就很好的防止了这个问题。运维监控零碎,在一些大型的我的项目中,监控是必不可少的。监控零碎要监控的内容,可能是随时多变的,这时候应用MongoDB就体现了很大的便当。不须要去批改数据库的构造,间接依据业务须要灵便调整即可。大大升高了开发成本。O2O业务场景,将送快递骑手、快递商家的信息(蕴含地位信息)存储在 MongoDB,而后通过 MongoDB 的地理位置查问,这样很不便的实现了查找左近的商家、骑手等性能。游戏业务场景,应用 MongoDB 存储游戏用户信息,用户的配备、积分等间接以内嵌文档的模式存储,不便查问、更新。社交业务场景,应用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现左近的人、地点等性能。物联网业务场景,应用 MongoDB 存储所有接入的智能设施信息,以及设施汇报的日志信息,并对这些信息进行多维度的剖析。MongoDB装置MongoDB 提供了可用间接装置的二进制包,能够从MongoDB官网下载安装,能够下载各个系统的安装包。 下载地址:https://www.mongodb.com/try/d...装置过程就省略了,装置失常流程下一步就行了,装置胜利后,可到bin目录下启动 MongoDB 的服务: 客户端工具MongoDB 胜利后,还须要装置客户端工具能够通过界面的形式,更不便的治理 MongoDB 中的数据。MongoDB 相干的客户端工具有很多,这里咱们应用的是一款收费的客户端工具Robo 3T(以前叫Robomongo)。 下载地址:https://robomongo.org/download装置胜利后,能够配置连贯参数进行连贯。根本数据结构MongoDB 中根本的概念是文档、汇合、数据库等,为了更容易了解Mongo中的一些概念,通过比照SQL的概念: SQL 概念/术语MongoDB 概念/术语解释/阐明databasedatabase数据库tablecollection数据库表/汇合rowdocument数据记录行/文档columnfield数据字段/域indexindex索引table joins 表连贯,MongoDB 不反对primary keyprimary key主键,MongoDB 主动将 _id 字段设置为主键操作数据库创立数据库,应用use [db_name]命令去创立数据库,如下示例:# 通过命令 show dbs 能够查看目前所有的库> show dbsadmin 0.000GBconfig 0.000GBlocal 0.000GBtest 0.000GB# 通过 use newdb 创立一个名字为 newdb 的数据库,并主动应用> use newdbswitched to db newdb> show dbsadmin 0.000GBconfig 0.000GBlocal 0.000GBnewdb 0.000GBtest 0.000GB# 能够通过向数据库中新建一个表/汇合 newmap,并插入数据> db.newmap.insert({name:"新的文档"})WriteResult({ "nInserted" : 1 })删除数据库,通db对象中的dropDatabase()办法来删除,如下示例:> db.dropDatabase(){ "dropped" : "newdb", "ok" : 1 }> show dbsadmin 0.000GBconfig 0.000GBlocal 0.000GBtest 0.000GB操作汇合创立汇合,通过db对象中的createCollection()办法来创立汇合,例如创立一个lightmap汇合;> use newdbswitched to db newdb> db.createCollection('lightmap'){ "ok" : 1 }> show collectionslightmap删除汇合,能够通过collection 对象的drop()办法来删除汇合,例如删除一个article汇合;> db.article.drop()true> show collections总结通过本文,次要解说了 MongoDB 的基本概念以及相干操作,后续会持续更加深刻的分享 MongoDB 的应用技巧。 ...

December 20, 2021 · 1 min · jiezi

关于mongodb:MongoDB安装启动关闭授权

装置参考https://docs.mongodb.com/v5.0... 配置文件vim /etc/mongod.conf启动MongoDBsystemctl start mongod.service或mongod -f /etc/mongod.confMongoDB的敞开形式kill过程模式(不倡议应用) kill -2 PID #原理:-2示意向mongod过程发送SIGINT信号或者kill -4 PID #原理:-4示意向mognod过程发送SIGTERM信号自带模式 use admindb.adminCommand({shutdown:1})或mongod -f mongodb.conf --shutdownkilling process with pid: 1621留神: mongod过程收到SIGINT或SIGTERM信号,会做一些解决 切忌应用kill -9 查看日志/var/log/mongodb/mongod.log设置MongoDB开机启动systemctl enable mongod.service创立帐号创立管理员帐号 # 进入mongo shell命令mongo# 切换到admin库use admin# 创立root帐号db.createUser({ user: "root", pwd: "SADwerWSrTbdh", roles: [{ role: "root", db: "admin" }] })# 验证用户, 返回1示意胜利db.auth('root', 'SADwerWSrTbdh')批改配置 vim /etc/mongod.conf# 启用权限管制security: authorization: enabled重启mongodb 新建各个库的管理员帐号密码 # 验证数据库用admin库use admin# 新建管理员账号db.createUser({ user: "api", pwd: "xxxxxxx", roles: [{ role: "dbOwner", db: "spy" }] })# 批改用户db.updateUser('api', { roles: [ { role: "dbOwner", db: "spy" }, { role: "dbOwner", db: "spy99" }]})# 新建读写帐号db.createUser({ user: "youruser2", pwd: "yourpassword2", roles: [{ role: "readWrite", db: "yourdatabase" }] })# 显示用户show users# 删除用户db.dropUser("spider_api")# 导出spy99库到backed目录mongodump --host 127.0.0.1 --port 33017 --username 'api' --password 'xxxxxxxxxxx' --authenticationDatabase admin -d spy99 -o backed# 导入backed目录到spy99库mongorestore --host 127.0.0.1 --port 33017 --username 'api' --password 'xxxxxx' --authenticationDatabase admin -d spy99 backed

December 14, 2021 · 1 min · jiezi

关于mongodb:MongoDB日志滚动

进入到mongo的命令行交互程序,输出: use admindb.auth('root', '明码')db.runCommand({logRotate: 1})输入 spy:PRIMARY> db.runCommand({logRotate: 1}){ "ok" : 1, # 1示意胜利 "$clusterTime" : { "clusterTime" : Timestamp(1639454694, 22), "signature" : { "hash" : BinData(0,"cSlu4Fz/b6GilocR/VwfXOWdsxM="), "keyId" : NumberLong("7031832375268999172") } }, "operationTime" : Timestamp(1639454694, 22)}进入日志目录查看日志:cd /var/log/mongodb [root@s187049 mongodb]# ll -htotal 1.6G-rw------- 1 root root 16K Dec 14 12:06 mongod.log-rw-r----- 1 mongod mongod 1.1G Dec 14 12:04 mongod.log.2021-12-14T04-04-54

December 14, 2021 · 1 min · jiezi

关于mongodb:使用WT工具恢复MongoDB数据

家喻户晓MongoDB的底层存储是由WiredTiger负责的,其数据文件也是.wt格局。既然如此,咱们就有可能不通过MongoDB服务,而是间接用wt工具从数据文件中复原数据。尽管咱们通常举荐生产环境肯定要配置复制集,然而很无奈,技术社区曾经数次有人因为单机运行,最初硬盘损坏等起因导致无奈启动。wt工具作为最初一根稻草,能够在放弃医治前再尝试解救一下。 编译wt工具能够运行于Linux和Windows上。因为各自的操作系统和MongoDB版本不同,可能产生较多的组合。在应用时应该依据本人状况编译适宜的版本。上面以CentOS 7为例演示编译过程。 1.装置操作系统依赖 sudo yum install -y epel-release libtool automake snappy snappy-devel lz4 lz4-devel zstd zstd-devel libzstd-devel zlib zlib-devel git make vim-common2. 筹备源码 git clone https://github.com/wiredtiger/wiredtiger.git依据所应用的MongoDB版本,应该抉择正确的wt分支。例如我以后应用的MongoDB 4.4.1,那么同样应该抉择WiredTiger的相应tagmongodb-4.4.1 > git tag | grep 4.4.1mongodb-4.4.1mongodb-4.4.1-rc0mongodb-4.4.1-rc1mongodb-4.4.1-rc2mongodb-4.4.1-rc3mongodb-4.4.10mongodb-4.4.10-rc0mongodb-4.4.11-rc0> git checkout tags/mongodb-4.4.1 -b v4.4.13. 编译源码 sh autogen.sh./configure --disable-shared --with-builtins=lz4,snappy,zlib,zstdmake -j $(nproc)make install简略起见咱们应用了--disable-shared来将动态链接库间接打包到执行文件中,这样能够防止很多后续的麻烦,代价是生成的执行文件较大。 编辑数据如果有幸dbpath中的其余文件没有失落,包含: WiredTiger* 要复原的汇合的collection-xxx.wt 与要复原汇合相干的index文件 则能够间接应用wt工具复原数据了: wt dump file:collection-10--2280053313118266952.wt不过,如果所有货色都还在的话,为什么还要用wt来复原呢?所以我置信大部分人到这里都是跑不上来的。所以来看下一步,当你丢到只剩个裤衩子的时候该怎么办。 数据恢复wt读取数据的根本前提条件是要有元数据,也就是WiredTiger*那堆文件。那咱们就来尝试结构这些文件: mkdir tempcd temptouch WiredTiger WiredTiger.lockwt list为了简略起见,后续步骤咱们没有应用wt来实现,而是应用MongoDB: mongod --dbpath ./启动另一个窗口,应用mongo shell连贯到以后实例: mongo任意创立一个汇合,咱们将把数据恢复到这个汇合中: db.dump.insert({x: 1});db.dump.stats().wiredTiger.uri# statistics:table:collection-7-666354062479792805collection-7-666354062479792805.wt即咱们要应用的指标文件名。此时应: ...

December 13, 2021 · 1 min · jiezi

关于mongodb:MongoDB在-AWS-Marketplace-中推出即用即付产品有力提升客户体验

MongoDB与 AWS Marketplace 的集成,将助力客户在AWS上更容易查找MongoDB Atlas,并全面简化订阅、新用户注册和治理流程。 2021 年 12 月 9 日 —— MongoDB日前在AWSre:Invent流动期间发表,公司将于 2022 年第一季度在 AWS Marketplace 中提供 MongoDB Atlas云服务,让客户更轻松地构建、扩大和治理数据丰盛的利用。随着在 AWSMarketplace 中收费试用的即用即付 MongoDB Atlas 的推出,这将为开发人员带来简化的订阅体验,除了合同签订的购买形式,企业将有更多的抉择来购买 MongoDB Atlas。在 AWS 上应用 MongoDB Atlas 不须要事后承诺用量,客户只需为曾经应用的资源付费,并按需进行扩大。此外,客户还能够在AWS Marketplace 中购买 MongoDB 业余服务,为企业提供对立的中央来施行、配置和运行 MongoDB 工作负载。 Unqork是当先的企业无代码平台,其业务基于 MongoDB Atlas 构建。 Unqork 创始人兼首席执行官Gary Hoberman 示意: “当我还是财产50 强公司的 CIO 时,我就开始应用MongoDB,起初在我创建 Unqork 后我仍持续应用MongoDB。Atlas 是我的首选数据平台,因为它提供了我开展业务所需的所有性能劣势。Unqork 也是 AWS Marketplace 的现有客户,咱们很快乐当初可能通过 AWSMarketplace 订阅新的 MongoDB SaaS 解决方案,简化洽购、计费和数据治理流程。” MongoDB 寰球合作伙伴执行副总裁 Alan Chhabra 评估道: “MongoDB 及其文档模型部署在许多 AWS 和 MongoDB 客户的环境中,可进步开发人员的生产力、升高企业老本,并提供高增长应用程序所需的扩展性。正是出于这个起因,来自世界各地的各行各业的新兴公司和寰球企业都会抉择 MongoDB 作为其下一代现代化应用程序的数据根底。MongoDB Atlas 使客户可能将他们相熟的环境扩大到 AWS,以便应用通用的根底和工具运行雷同的应用程序,无论应用程序是在云端还是在本地。咱们很快乐在 AWSMarketplace 中提供 MongoDB Atlas,这能够让 MongoDB 的客户更轻松地在 AWS 上构建、治理和扩大其数据丰盛的应用程序。” ...

December 13, 2021 · 1 min · jiezi

关于mongodb:一文读懂MongoDB事务处理

转瞬到了年底,往年您在MongoDB 相干技术实际上又有什么新意识呢?无妨抓住2021年的小尾巴,捋一捋思路,为本人应用MongoDB的一些技术实际和利用做一个记录和分享。 告诉:为了邀请更多用户敌人分享本人的实际与见解,原定于2021年11月30日截止的MongoDB技术实际与利用案例征集流动截稿现已延期至2021年12月20日。 欢送各位 MongoDB用户敌人来分享您在MongoDB技术与利用实际上的一些教训与意识,在梳理与记录中获取更多洞察,在技术分享中结识同行者,播种更多学习交换与倒退的机会。 社区将收录更多MongoDB技术实践经验与利用案例,将技术实际分享给社区用户,促成技术流传与交换,为更多MongoDB数据库用户提供技术利用参考,同时为加入征文活动的MongoDB用户提供分享平台,建设本身在MongoDB技术圈的集体品牌,发明更多交流学习与展现的机会。 已提交稿件的敌人,如有须要进一步批改欠缺稿件,可于12月20号前将更新版本发送给小芒果哦~【征集流动要点】流动主题: MongoDB技术实际与利用案例征集流动 征集范畴: MongoDB数据库利用场景和行业利用案例利用场景与案例分享因素参考:业务背景,选型理由,相干性能,利用技术,解决方案,功效。 MongoDB技术利用与实际公司或行业在某种需要场景下的MongoDB利用技术实际,应用MongoDB数据库过程遇到的技术挑战及解决办法分享,例如:性能优化,开发技巧,运维治理,压力测试,与其它生态技术的联合等。 MongoDB新性能利用实际包含不限于:update加强,unionWith,wildCardIndex,merge aggregate,Refinable Shard Keys,Compound Hashed Shard Keys,Hedged Reads,时序汇合,实时从新分片,版本化的API 等。 【投稿要求】内容不违反法律法规,规章及规范性文件;内容必须和MongoDB相干;内容必须为原创,严禁剽窃或洗稿;内容清晰易懂、信息详实精确、有深度;同一名作者投稿篇数不限,但雷同内容不能反复投稿,投稿内容未发表过;内容能够受权MongoDB中文社区渠道进行首发与宣传,如有先公布于其余渠道则勾销获奖资格。【征集流动流程及工夫节点】征集工夫:2021年10月13日-2021年12月20日 评审工夫:2021年12月21日-2021年12月30日 评审规范:针对公司或行业在数字化、智能化建设中的重点、难点问题提出的解决方案,在理念、办法、具体推动过程中有创新性;利用、教训、技巧具备代表性,对其余公司及行业倒退有启发、利用价值 评审专家: 唐建法,孔德雨,李丹,徐雷,陈亮亮,郭远威,唐卓章 奖项颁布工夫:2021年12月22日 深度用户专访:2021年12月20日起 入库案例颁布:2021年12月20日后,社区网站和自媒体渠道等陆续公布相应,并汇编MongoDB案例库。 【报名及征询形式】将文稿提交至本链接:https://sourl.cn/eXwU57 长按扫描二维码 进入文稿提交页面 可增加社区助理小芒果(微信ID:mongoingcom)进行征询。 长按扫描二维码 增加小芒果微信获取免优惠码 往期征集文章示例:2020最佳案例分享 | MongoDB读写拆散异样案例剖析 2019年最佳案例分享 | OPPO百万级高并发MongoDB集群性能数十倍晋升优化实际 获奖文章分享 | MongoDB技术从0到1+ 获奖文章分享 | MongoDB GridFS 怎么用 【处分及激励设置】为什么加入案例征集: 大会将邀请MongoDB专家进行评审,为入围者颁发证书和奖品,为所有加入征集流动的用户提供小礼品一份; 收录到MongoDB中文社区发表,案例推送曝光,为企业和个人用户提供案例展现位; 最佳利用案例获得者将邀请到技术大会现场分享,加入案例征集的入围成员组建VIP交换群,在应用MongoDB过程遇到问题优先取得社区专家的反对,并在社群提供交流学习和单干反对。 奖项设置: 最佳利用案例 1名: 华为Matepad11平板电脑 +MongoDB中文社区礼包+ 奖杯 优良案例3名:ikbc无线机械键盘 + MongoDB中文社区礼包+ 获奖证书 入围案例若干名:MongoDB中文社区礼包 + 获奖证书 MongoDB中文社区礼包内含:MongoDB定制背包+ 马克杯 + 合作伙伴礼品盲盒,平板电脑和机械键盘可兑换成京东购物券;所有获奖与入围的敌人都将邀请进入MongoDB外围用户交换群,问题与交换将取得优先响应,并享有更多交流学习与展现机会。 ...

December 7, 2021 · 1 min · jiezi

关于mongodb:mongoDb入门并整合springboot

镜像下载、域名解析、工夫同步请点击 阿里巴巴开源镜像站 MongoDb简介MongoDb是一种非关系型数据库,是当初十分炽热的noSQL。也被称为文档性数据库。(可寄存json,xml等格局)mongodb与mysql命令比照 传统的关系数据库个别由数据库(database)、表(table)、记录(record)三个档次概念组成,MongoDB是由数据库(database)、汇合(collection)、文档对象(document)三个档次组成。(存储xml,json等)MongoDB对于关系型数据库里的表,然而汇合中没有列、行和关系概念,这体现了模式自在的特点。一条MongoDB就是一个相似json数据结构。特点:存储形式:虚拟内存+长久化。(数据存储在磁盘,然而充分利用了缓存,罕用的数据放于内存)不应用固定的sql进行操作。(有固定语法)1.MongoDb的长处高速。反对json。(可寄存简单数据)可扩大分片集群。2.MongoDb的毛病事务关系反对单薄。稳定性有余。运维难。不反对对表关联查问。在指定id之后插入会比较慢。3.应用场景对大量无固定格局的数据存储,如日志等。(充沛的应用了内存)须要高性能。扩大集群。MongoDb的curd语法装置首先须要装置,能够依照这位老哥的来装置 操作命令进入C:\Program Files\MongoDB\Server\3.4\bin,双击mongo.exe。 show dbs --查看数据库,假如咱们有一个叫test的数据库use test 应用test数据库1.插入语法db.message.save({'name':'xiaobao','age':27,'class':'1-1'}) --插入message的信息。外面为json。db.message.save({'name':'xiaobao2','age':28,'class':'2-1'})db.message.save({'name':'xiaobao3','age':29,'class':'3-1'})2.查问语法db.message.find() --查问messagedb.message.find().pretty() --格式化在查问db.message.find() .limit(1) --查问一条db.message.find({"age":{"$gte":10}}) --查问age大于10的数据db.message.find({"age":{"$lte":10}}) --查问age小于10的数据db.message.find().sort({"age":1}) --正排序db.message.find().sort({"age":1}) --负排序db.message.count() --查问条数3.批改语法db.message.update({"name":"xiaobao"},{$set:{"name":"xiaowang"}}) db.message.update({"name":"xiaowang"},{"name":"laoli"}) --批改name 为laoli 其余值删除db.message.update({"name":"xiaobao2"},{$set:{"name":"xiaowang"}},{upsert:true}) --如果没有 减少一条db.message.update({"name":"xiaowang"},{$set:{"name":"xiaowang"}},{multi:true}) --批改所有数据4.删除语法db.message.remove() --删除所有db.message.remove({'class':'1-1'}) --删除class = 1-1的那条整合spring boot在application.properties退出mongoDb链接。 spring.data.mongodb.uri=mongodb://192.168.2.81:27017/test 而后应用MongoTemplate 来操作数据库,MongoTemplate 和罕用的RedisTemplate差不多,都是封装了mongoDb办法的客户端。 @Autowired private MongoTemplate mongotemplate; //减少 @RequestMapping(path = "/savemongo", method = RequestMethod.POST) @ResponseBody public void savecCity(@RequestBody City city) { mongotemplate.save(city);//通过一个类类型向数据库中插入json } //查问 @RequestMapping("/selmongo") @ResponseBody public City select(@RequestParam int id) { Query query = new Query(Criteria.where("id").is(id)); //查问id为传入参数 City user = mongotemplate.findOne(query, City.class); return user; } //删除 @RequestMapping("/delmogo") @ResponseBody public void del(@RequestParam int id) { Query query = new Query(Criteria.where("id").is(id)); //集体了解此行为查问条件,而后在上面查找出在删除。 mongotemplate.remove(query, City.class); } //批改 @RequestMapping(path = "/updamogo", method = RequestMethod.POST) @ResponseBody public void updateMongo(@RequestBody City city) { Query query = new Query(Criteria.where("id").is(city.getId())); Update update = new Update().set("provinceId", city.getProvinceId()).set("cityName", city.getCityName()); mongotemplate.updateFirst(query, update, City.class); }本文转自:https://blog.51cto.com/u_1540... ...

December 7, 2021 · 1 min · jiezi

关于mongodb:关于mongoDB发生-out-of-memory的问题

1 问题形容 应用程序和MongoDB运行时,在查问和读取文件的时候产生的文件量较多。 1.查问索引 db.page.getIndexes()2.配置conf # Where and how to store data.storage: dbPath: /var/lib/mongo #dbPath: /mongodata journal: enabled: true# engine: mmapv1: smallFiles: true wiredTiger: engineConfig: configString : cache_size=512M或者 systemLog: destination: file path: "D:\\db.log" logAppend: truestorage: dbPath: "D:\\db" directoryPerDB: true journal: enabled: true wiredTiger: engineConfig: cacheSizeGB: 0.256net: bindIp: 127.0.0.1 port: 27017security: authorization: disabled呈现这种状况的起因: 1.索引问题,加上指定的内存,会导致启动索引会吃掉所有内存导致杀死过程,以致于mongodb内存溢出关机,mongodb的重建索引的时候,吃掉所有内存。 2.就是决定它本人要用多少内存的代码了。先留出1G,而后再留出40%,剩下的能吃就吃!这种状况在机器内存少的时候没有呈现,大略是因为内存少的时候,mongod 留出的比例比拟高,内核就没那么卖命地把数据往 swap 上挪了,后果造成内核挪多少,mongod 吃多少……解决办法: 要配置mongoDB的内存为MB当你的内存大于1GB,mongodb会用掉 内存的60% - 1GB 的内存作为缓存;当你的内存小于1GB,mongodb会间接用掉1GB。

December 2, 2021 · 1 min · jiezi

关于mongodb:Tapdata-在线研讨会DaaS-vs-大数据平台是竞争还是共处

从20年前的传统数仓,到10年前大数据平台,5年前开始炽热的数据中台以及最近呈现的湖仓一体新数据平台,明天被数据孤岛困扰的企业,面临着太多的抉择。这些数据产品及架构有一个共性:他们实质上解决的大部分都是剖析洞察类场景( Analytical),无论是BI,报表,指标,标签,画像,AI等。然而实际上,企业在事务型(Transactional)类型上的业务投入和AP 相比是9:1之差异。而Real Time DaaS, 则是次要为TP型场景设计的一个实时数据平台。 咱们为什么须要一个Real Time DaaS?它和大数据平台技术上有什么区别?如果企业还没有构建数据平台,我是应该思考DaaS还是Big Data?如果曾经有了大数据平台,我是否还须要DaaS? 如果你想理解更多,请加入本次的在线研讨会。TJ会具体论述 Tapdata DaaS的技术个性以及在不同成熟度企业的正当使用。 咱们还提供了丰盛的参会礼品,不论是报名参会还是分享海报,都有机会取得机械键盘、数据库相干技术书籍以及精美伴手礼!详情关注文末介绍。主题:DaaS vs 大数据平台,是竞争还是共处?主讲人:唐建法Tapdata「钛铂数据」创始人,MongoDB 中文社区主席,极客工夫《 MongoDB 高手课》作者,鲲鹏会 TGO 成员。多年海内外工作教训,曾在惠普、联邦快递、MongoDB 等公司任职资深架构师、数据库专家和技术总监。先后为华为、中国移动、中国银行、普华永道、台积电等大型企业提供过数据方面的架构及计划。工夫:2021年12月8日(周三)20:00-21:00适宜人群:CIO、IT主管、架构师、DBA、数据开发人员模式:在线直播费用:收费报名形式: 关注 Tapdata 微信服务号即可报名,会前咱们将通过微信音讯将参会链接发送给您;增加官网小助手微信进入 Tapdata Cloud 产品共创群,会前咱们将在群里分享直播链接。 转发有奖转发本流动链接至朋友圈,并将截图发给官网小助手即可加入抽奖;咱们将于在线研讨会开始前1小时,即12月8日晚7点开出会前抽奖,送出机械键盘1个,书籍《数据库系统底细》2本,《图解SQL—数据库语言轻松入门》3本,伴手礼10个。 参会有奖周三晚在线研讨会期间,依照主持人批示加入抽奖,咱们将在分享期间抽奖送出机械键盘1个,书籍《数据库系统底细》2本,《图解SQL—数据库语言轻松入门》3本,伴手礼10个。 100%有奖!关注下方二维码即可获取您的专属海报,依照后盾指引操作能够间接支付书籍1本(限量20名)! 反对单位Tapdata 本地部署版本即刻体验实时数据服务平台

November 24, 2021 · 1 min · jiezi

关于mongodb:MongoDB学习之基本操作

数据库的基本操作 抉择数据库use + 数据库名称 use mock 创立数据库use + 要创立的数据库名称 -> 而后插入一条数据 ===> show dbs就能看见新的数据库了 删除数据库首先应用use + dbName切换到要删除的数据库 -> 而后输出以下命令 db.dropDatabase() 汇合的基本操作 插入操作格局插入一条 db.<汇合>.insertOne(<JSON对象>) 插入多条 db.<汇合>.insertMany([<JSON对象>,<JSON对象>,<JSON对象>]) 查看有哪些汇合show tables 或者 show collections创立一个汇合1.间接应用 db.<汇合>.insert 的形式 2.创立一个空集合 db.createCollection("<汇合名称>") 创立一个汇合的时候还能够指定一些参数 字段类型形容capped布尔(可选)如果为true,设置这个汇合为固定汇合,须要指定这个汇合的最大值,当插入数据会超过这个汇合的值的时候,新的数据会笼罩最老的数据,并且数据不能不能被批改。size数值(可选)汇合的最大值,即当 capped为true的时候设置。max数值(可选)汇合中的数据最大条数。 \#如果说我把这个汇合的 max 设置为 3 db.<汇合>.insertMany(<对象1>,<对象2>,<对象3>,<对象4>) #下面这条语句执行完后应用 db.<汇合>.find()查问这个汇合的所有数据 后果会是 : <汇合2>,<汇合3>,<汇合4> 删除汇合1.抉择汇合所在的数据库 2.删除汇合 db.<汇合>.drop() 替换汇合中的一条数据db.<汇合>.replaceOne(<JSON>,<JSON>) db.汇合.replaceOne({"name":"小明"},{"name":"小明","sex":"女"}) --将一条满足名字为小明的数据替换成 更新操作db.<汇合>.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> })query:相似于sql中的where条件 属于 筛选数据update:相似于sql中的set 属于 要更新的数据upsert:(可选)如果数据不存在的话 做insert操作,默认false不操作multi:(可选)是否更新多条数据 默认为false 当有多条数据合乎query条件时只更新第一条writeConcern:(可选)抛出异样的级别。db.china.update({"name":"苑勇"},{$set:{"province":"北京"}},{"upsert":true});#除此之外 mongodb 还细分了 db.<汇合>.updateOne()和db.<汇合>.updateMany()删除操作db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document> })query:筛选条件justOne:如果是true或者1只删除筛选出的第一条 默认false全删操作格局RDBMS中的相似语句等于{:},{$eq:[A,B]}where = '菜鸟教程'where A = B小于{:{$lt:}}where < 50小于或等于{:{$lte:}}where <= 50大于{:{$gt:}}where > 50大于或等于{:{$gte:}}where >= 50不等于{:{$ne:}}where != 50OR条件 ...

November 21, 2021 · 1 min · jiezi

关于mongodb:MongoDB-Sort-内存问题

MongoDB Sort 内存问题0. 问题形容# pythonclient.find(filter_).sort('updatedAt', sort_).skip(skip_).limit(limit_)在 MongoDB 分页查问时, 因为排序的数据太大会有内存问题. 有三种解决方案 1. 设置排序字段索引db.getCollection('col').createIndex({"updatedAt": 1})2. 进步数据库排序的内存下限db.adminCommand({setParameter: 1, internalQueryExecMaxBlockingSortBytes: 104857600})3. 更换 aggregate 进行查问 (最优计划)更换 aggregate 进行查问, 并设置 allowDiskUse 为 True 容许应用磁盘 # pythonclient.aggregate([ {'$match': {}}, {'$sort': {'updatedAt': 1}}, {'$skip': 10000}, {'$limit': 10},], allowDiskUse=True)

November 18, 2021 · 1 min · jiezi

关于mongodb:参会指南-2021MongoDB南京技术沙龙

2021年MongoDB南京技术沙龙将于11月20日(本周六)召开!本次技术沙龙邀请MongoDB专家和深度用户带来MongoDB一手干货和实际分享给大家,还有设置QA环节供各位朋友间接与嘉宾讲师进行交换探讨,不论内容还是交换都能够丰盛您的技术认知,拓宽您的职业倒退视线。欢送各位 mongoer携友同来! 大会速递大会工夫:2021年11月20日下午(本周六) 13:30-17:30大会地点:南京市雨花台区·紫荆花路2号 新晶丽酒店报名链接:http://hdxu.cn/mK7Vq 长按扫描二维码进入报名页面 获取【1元票】请分享流动并增加小芒果(微信ID:mongoingcom)获取,说不定还能够领到收费的特邀余票哦! 长按扫描二维码增加小芒果微信获取优惠码 大会议程 大会礼品 【参会领礼品】 将本流动转发至朋友圈,集赞20个,凭微信链接分享记录在会场签到处支付流动现场礼品一份:MongoDB定制T恤、环保袋、马克杯套装等周边礼品【数量无限,先到先得】Apple HomePod mini智能音箱,MongoDB定制商务背包,MongoDB最新书籍《MongoDB 进阶与实战》,抽奖大礼尽在MongoDB中文社区南京流动现场等你拿! 【分享流动领礼品】 将本流动文章转发到微信朋友圈并集赞30个,将分享截图提交到此链接:https://sourl.cn/fUfaqj咱们将于11月22号颁布赠送名单,送出MongoDB定制背包3个,T恤5件,马克杯套装10个。 【预约线上直播】 咱们给不能来南京线下相聚的敌人开设了线上直播,线上的mongoers能够点此预约直播:http://www.itdks.com/Home/Act...直播过程您有什么想理解的问题,能够将问题发给小芒果(微信ID: mongoingcom),咱们将选取局部问题邀请现场讲师答复。 常见问答会场地址在哪里?南京市雨花台区·紫荆花路2号 新晶丽酒店会议是什么时候开始?须要提前多久签到?会议周六下午1:30正式开始,下午1:00-1:30为签到工夫。如何签到?签到请出示流动行报名胜利的二维码,或者报相应手机号。二维码获取:【流动行】公众号—取票—小程序取票—待加入(记得登录)如何领分享礼品?将您分享流动取得20个赞的截图给签到的工作人员查看后即可认领。如何加入现场抽奖?现场扫码加入抽奖,在场抽中无效。劳动期间抽奖送出MongoDB最新书籍《MongoDB 进阶与实战》,大会完结后抽奖送出Apple HomePod mini 智能音箱,MongoDB定制商务背包,并进行合影。如何获取会议PPT?大会完结后会在Mongoing中文社区微信公众号公布经嘉宾容许分享的PPT,您也能够增加小芒果微信,发送“mongo”进入社区技术交换群,咱们也会在社群内分享大会文件。其它问题?请分割小芒果(微信ID:mongoingcom)。

November 17, 2021 · 1 min · jiezi