阿里云高级技术专家
直接将这个collection shard一下,也会自动迁移数据的到其他shard的
MongoDB的版本是什么? 是否开启了journal?
授人以渔,胜过授人以鱼,使用aggregate
你好,非常感谢你关注我的文章
以正确方式连接复制集来保证高可用是指(以写操作为例说明)
当你后端的复制集有成员故障时,可能会选出新的primary,这时driver会自动检测到后端节点宕机时,会获取到最新的副本集状态,然后向新的primary写入,这样应用程序就能继续写入。
但如果使用driver时,仅仅只是『正确连接副本集』是远远不够的,应用程序该做的基本逻辑还是要有的,不然也是无法保证高可用。
按你描述的场景,正确连接副本集后,如果你做了上述1、2的工作,是完全可以保证服务高可用,数据高可靠的。
driver连接副本集时,连接地址里指定所有成员的信息,当副本集有成员宕机时,driver会自动进行failover,连接到新的primary。
driver连接分片集群时,连接地址里指定多个mongos的信息,当有mongos宕机时,driver会自动连接可用的其他mongos。
可能是你的查询条件并没有匹配的文档,而你有设置了第3个参数upsert为true,当update没找到匹配条件的文档时,会将新的文档insert到集合。
嵌套数组目前mongodb支持比较弱,暂不能满足你的需求;你的文档结构比较复杂,应该重新再review下你的设计方案是否有可以改进的地方。
db.collection.update( {name: "join"}, { $set: {name: "name john"} }, {multi: true} )
目前阿里云MongoDB、redis已支持vpc,你在控制台购买实例的时候就能选择将实例加入到某个vpc网络里(如果还没有专有网络,需要先创建)
补充一下楼上的,索引通常会常驻内存,但如果实例配置的内存不足,索引也是需要先从硬盘加载的;
如果需要对用户、时间2个维度分别进行查询,则需要针对2个维度分别建立索引。索引的原理参考:https://yq.aliyun.com/articles/33726?spm=0.0.0.0.PsBXc4&msgid=12861
这些是数据库帐号认证时的日志,你可以通过setLogLevel来调整日志级别了关闭这些日志。
2.6版本支持了$position操作符,可以实现这个功能
https://docs.mongodb.org/manual/reference/operator/update/push/
目前MongoDB 3.2版本,mmapv1支持集合级别锁,wiredtiger引擎支持文档级别锁,锁粒度比2.x版本要小很多。
大量文件存储可考虑下OSS
针对uid字段建立索引,遍历[10, 9, 1, 12...]列表,逐个根据uid查询文档,使用in的查询效率很低的,无法使用索引,而且每次比较都要遍历数组。
OperationFailure: could not find host matching read preference { mode: "primary", tags: [ {} ] } for set rs1
请确认下rs1这个副本集当前的primary是否正常
备份本质上是『遍历所有的数据库,所有的集合,将文档导出』,这些用mongodb的java driver都能实现的。官方已经有比较完备的工具支持,如mongodump, mongorestore, mongooplog等工具,没必要再用java重复造轮子