MongoDB 那些坑

Python玩转MongoDB避坑指南:从CRUD到万亿级数据优化实战 Python与MongoDB的组合在技术选型中表现出色,尤其在灵活Schema、横向扩展成本和聚合分析性能方面。典型应用场景包括日志系统、电商订单和物联网时序数据存储。环境搭建和基础操作部分提供了详细的安装和连接池配置指南,以及防坑建议。进阶实战技巧涵盖了批量写入优化、索引优化和聚合查询优化,帮助提升性能。对于万亿级数据场景,分片集群部署架构和分片键选择策略是关键。监控与运维体系部分介绍了核心监控指标和Prometheus监控方案。总结与避坑指南提供了核心建议、经典错误案例和版本选择建议,帮助用户避免常见问 阅读详情

MongoDB 是目前炙手可热的 NoSQL 文档型数据库,它提供的一些特性很棒:如自动 failover 机制,自动 sharding,无模式 schemaless,大部分情况下性能也很棒。但是薄荷在深入使用 MongoDB 过程中,遇到了不少问题,下面总结几个我们遇到的坑。特别申明:我们目前用的 MongoDB 版本是 2.4.10,曾经升级到 MongoDB 2.6.0 版本,问题依然存在,又回退到 2.4.10 版本。

MongoDB 数据库级锁

坑爹指数:5星(最高5星)

MongoDB的锁机制和一般关系数据库如 MySQL(InnoDB), Oracle 有很大的差异,InnoDB 和 Oracle 能提供行级粒度锁,而 MongoDB 只能提供 库级粒度锁,这意味着当 MongoDB 一个写锁处于占用状态时,其它的读写操作都得干等。

初看起来库级锁在大并发环境下有严重的问题,但是 MongoDB 依然能够保持大并发量和高性能,这是因为 MongoDB 的锁粒度虽然很粗放,但是在锁处理机制和关系数据库锁有很大差异,主要表现在:

  • MongoDB 没有完整事务支持,操作原子性只到单个 document 级别,所以通常操作粒度比较小;
  • MongoDB 锁实际占用时间是内存数据计算和变更时间,通常很快;
  • MongoDB 锁有一种临时放弃机制,当出现需要等待慢速 IO 读写数据时,可以先临时放弃,等 IO 完成之后再重新获取锁。

通常不出问题不等于没有问题,如果数据操作不当,依然会导致长时间占用写锁,比如下面提到的前台建索引操作,当出现这种情况的时候,整个数据库就处于完全阻塞状态,无法进行任何读写操作,情况十分严重。

解决问题的方法,尽量避免长时间占用写锁操作,如果有一些集合操作实在难以避免,可以考虑把这个集合放到一个单独的 MongoDB 库里,因为 MongoDB 不同库锁是相互隔离的,分离集合可以避免某一个集合操作引发全局阻塞问题。

建索引导致数据库阻塞

坑爹指数:3星

上面提到了 MongoDB 库级锁的问题,建索引就是一个容易引起长时间写锁的问题,MongoDB 在前台建索引时需要占用一个写锁(而且不会临时放弃),如果集合的数据量很大,建索引通常要花比较长时间,特别容易引起问题。

解决的方法很简单,MongoDB 提供了两种建索引的访问,一种是 background 方式,不需要长时间占用写锁,另一种是非 background 方式,需要长时间占用锁。使用 background 方式就可以解决问题。
例如,为超大表 posts 建立索引,
千万不用使用

db.posts.ensureIndex({user_id: 1})

而应该使用

db.posts.ensureIndex({user_id: 1}, {background: 1})

不合理使用嵌入 embed document

坑爹指数:5星

embed document 是 MongoDB 相比关系数据库差异明显的一个地方,可以在某一个 document 中嵌入其它子 document,这样可以在父子 document 保持在单一 collection 中,检索修改比较方便。

比如薄荷的应用情景中有一个 Group document,用户申请加入 Group 建模为 GroupRequest document,我们最初的时候使用 embed 方式把 GroupRequest 放置到 Group 中。
Ruby 代码如下所示(使用了 Mongoid ORM):

class Group
  include Mongoid::Document
  ...
  embeds_many :group_requests
  ...
end

class GroupRequest
  include Mongoid::Document
  ...
  embedded_in :group
  ...
end

这个使用方式让我们掉到坑里了,差点就爬不出来,它导致有接近两周的时间系统问题,高峰时段常有几分钟的系统卡顿,最严重一次甚至引起 MongoDB 宕机。

仔细分析后,发现某些活跃的 Group 的 group_requests 增加(当有新申请时)和更改(当通过或拒绝用户申请时)异常频繁,而这些操作经常长时间占用写锁,导致整个数据库阻塞。原因是当有增加 group_request 操作时,Group 预分配的空间不够,需要重新分配空间(内存和硬盘都需要),耗时较长,另外 Group 上建的索引很多,移动 Group 位置导致大量索引更新操作也很耗时,综合起来引起了长时间占用锁问题。

解决问题的方法,说起来也简单,就是把 embed 关联更改成的普通外键关联,就是类似关系数据库的做法,这样 group_request 增加或修改都只发生在 GroupRequest 上,简单快速,避免长时间占用写锁问题。当关联对象的数据不固定或者经常发生变化时,一定要避免使用 embed 关联,不然会死的很惨。

不合理使用 Array 字段

坑爹指数:4星

MongoDB 的 Array 字段是比较独特的一个特性,它可以在单个 document 里存储一些简单的一对多关系。

薄荷有一个应用情景使用遇到严重的性能问题,直接上代码如下所示:

class User
  include Mongoid::Document
  ...
  field :follower_user_ids, type: Array, default: []
  ...
end

User 中通过一个 Array 类型字段 follower_user_ids 保存用户关注的人的 id,用户关注的人从 10个到 3000 个不等,变化是比较频繁的,和上面 embed 引发的问题类似,频繁的 follower_user_ids 增加修改操作导致大量长时间数据库写锁,从而引发 MongoDB 数据库性能急剧下降。

解决问题的方法:我们把 follower_user_ids 转移到了内存数据库 redis 中,避免了频繁更改 MongoDB 中的 User, 从而彻底解决问题。如果不使用 redis,也可以建立一个 UserFollower 集合,使用外键形式关联。

先列举上面几个坑吧,都是害人不浅的陷阱,使用 MongoDB 过程一定要多加注意,避免掉到坑里。

 

针对使用中遇到的问题,谈点我自己的感受吧,就谈点注意事项而已。

1. 一定要合理创建索引, 有很多人都被宣传片迷惑,认为mongo的读取速度本身就应该很快,所以从mysql转过来后,就连创建索引都忘了,当表(collection) 很大时,不创建索引是非常影响性能的。 创建索引很简单,如果你不想使用shell那么麻烦,直接在model里面声明就是了:index({ xxx: 1 }, { unique: true, background: true });然后运行一个rake命令:rake db:mongoid:create_indexes 就ok了,这个命令不会重复创建的。

2. 大表查询时,只返回你想要的列,楼主讲了很多write的性能问题,可能是场景不同的原因,我们大量遇到了查询的性能问题;这一点就不用多说了吧,其他关系型数据库也有这种问题。 特别是单collection字段数据量比较大时,非常容易引起性能问题,在rails里面也很简单,查询时加上only就是了。比如 User.where(xxx).only(:f1,:f2) 。

3. 尽量一次返回所有需要的数据,避免GET_MORE,避免游标操作,当用户进行查询迭代时,mongo会首先返回一个数据块供你迭代,当你迭代的数据超过这个数据块时,mongoid 发起 GET_MORE 命令移动游标获取下一个数据块,而就是这个移动游标的操作就非常慢,特别是你返回的列比较多的时候,性能非常低。每次返回的数据块的大小是由batchSize控制的,可以通过修改它的默认值进行控制。

4. 尽量避免在model里面使用Array类型的字段,原因楼主已经说了,不过我们遇到的还是查询的问题,因为你使用了Array,查询时,你不可避免的会使用 ##in## 操作,in操作无法利用索引,这个在关系型数据库里面也是存在的,大表操作一定要避免。

5. 不要在和数据库直接相关的model里面使用继承, 什么意思呢?就是 modelB < model A ,而他们都是mongo里面的 document,为什么不能这样? 因为mongoid的内部实现其实只会创建一张表就是documentA, 然后在 documentA 里面用一个 _type 字段来标识 documentB,这样当你查询 modelB 时,内部会生成一个查询到 documentA 的语句,那个查询就是用的 _type in [xxxx] 类似这样的语句,你看又是 in 操作。如果这种情况你是在后期才发现的,你真是回天无术,想死的心都有:)。

6. 事务,还是事务,mongodb不支持事务,所以你一定要考虑清楚,权衡利弊。我们有些功能就必须使用事务,没办法,我想到一个非常丑陋的方法,记录每个创建和更新的model,它的id和更新数据,如果一旦有异常,我就撤销更新和创建,真的是非常麻烦。想想看在一个支持事务的关系型数据库里面,这些是非常简单的。

MongoDB安装过程中遇到的一些坑 本文总结linux下MongoDB安装及启动过程中遇到的问题, PHP的mongo扩展要在php.ini文件中添加extension=mongo.so mongo客户端地址: linux 下载解压后,在mongodb目录下创建两个目录data,log,并在log目录下touch一个mongodb.log文件,这个很重要,后面有个坑! 启动: --dbpath 数据文件 阅读详情

相关推荐

macOS Catalina下安装MongoDB遇到的各种坑

首先官网下载 https://www.mongodb.com/download-center#community 然后解压放到根目录 安装完成后,我们可以把 MongoDB 的二进制命令文件目录(安装目录/bin)添加到 PATH 路径中: cd /usr/local sudo mv mongodb-osx-x86_64-4.0.9/ mongodb export PATH=/usr/local/...

weixin_45121701的博客 6507

详解mac系统通过brew安装mongodb与使用

介绍了如何在mac系统通过brew安装mongodb数据库与简单使用。

Hei, Welcome To vickie's Blog,Good Good Study, Day Day Up ~ 5633

MongoDB安装步骤,坑都踩过了

服务器 软件版本 服务器地址 项目位置 CentOS7 3.2.3 X /usr/local/program/mongodb 配置位置 数据位置 端口 账号/密码 /etc/mongodb.conf /data/mongodb 27017 每个库都对应一个账号密码 ##1.下载mongodb (看心情下吧) ##2.解压 [root@localhost ~...

午夜前醒来的博客 5176

MongoDB安装以及学习内容

id一定是唯一的,用来唯一标识一个文档 _id也可以直接指定,但如果数据库中此集合下已经有此。

fxz2773692772的博客 1566

立创开源Link Hub多功能USB扩展坞:CH339F主控+4层板设计,实测网口/存储性能

本文深度评测了立创开源Link Hub多功能USB扩展坞,其采用CH339F主控芯片与4层PCB板设计,并严格进行阻抗匹配。实测表明,该扩展坞的USB接口与microSD读卡器性能均接近USB 2.0理论极限,百兆以太网口转换效率高,性能损失极小。设计上注重电源保护与信号完整性,是一个兼顾稳定性与成本的高完成度开源硬件项目。

weixin_36173034的博客 155

别再为调试发愁!STM32CubeMX+FreeRTOS下,串口printf打印的保姆级配置指南(基于STM32F429)

本文详细介绍了在STM32CubeMX和FreeRTOS环境下实现稳定串口printf打印的配置方法。通过硬件选型、基础配置、线程安全的重定向实现以及高级调试技巧,帮助开发者解决多任务环境下的串口输出问题,提升调试效率。特别适用于STM32F429开发板用户。

weixin_42527401的博客 272

Mac m1 安装安装homebrew

Mac m1 安装安装homebrew

weixin_45554004的博客 3076

单细胞marker基因表达密度图-(还有一个包装函数)

我们借助Nebulosa,将上面的过程包装为一个函数,还是那句话,受累麻烦的事我们来解决,您轻松即可,先看看函数参数:需要注意的是,如果你只想框选某一类celltype,理想模式是这群celltype是单独聚类的,没有散落在其他类群,否则将会全部框选,效果不好,建议使用AI/PS添加。需要注意,这里我算是投机取巧了,用了一个和这个作图毫无关系的包ggnetwork,主要的目的是用他的theme_blank()主题,一次性将所有清空,当然也可以自己慢慢写,不过有现成的,为啥不用呢?这质感不就上去了嘛。

qq_42090739的博客 1366

在macOS系统中通过brew安装MongoDB数据库的方法

mac安装mongodb方法

qq_36594703的博客 586

多线程开发的基本概念

在Android开发中,我们常常会遇到多线程开发的需求。由于Android中的,我们不能在主线程处理耗时逻辑,否则会导致卡顿,甚至出现ANR(应用无响应)等异常情况。因此,我们需要将网络请求等耗时操作放到中去执行,完成后再更新UI。多线程开发因此成为Android开发中的一个重要部分。随着Android开发技术的不断进步,从早期的使用Handler,到后来的RxJava,再到如今的Kotlin协程,切换线程以及并发编程的代码写起来是越来越简洁了。

喻志强的博客 1017

微信小程序 - 最新详细实现跳转打开第三方网站方法流程及示例代码,在小程序内直接打开H5页面或微信公众号文章后台业务域名配置及下载校验文件上传服务器,嵌入外部网站跳转第三方h5网页(详细配置及代码)

微信小程序,打开第三方网站,放校验文件,怎么配置业务域名,后台配置,怎么打开外部没有关联的网站,小程序直接打开公众号文章,指定页面,跳转第三方url,跳转到外部网站,小程序跳转到任意外部网页,网站链接,跳转到其他网页(外部链接),小程序嵌入外部h5链接,校验文件怎么放到对方服务器上,要跳转到网站没权限放过去,校验文件验证域名,把校验文件放到对面网站,别人的服务器也打不开没权限怎么放呢,勾选不校验合法域名,txt,打不开别人的网页怎么办,真机调试打不开,无法跳转,有什么其他办法不放校验文件吗,别人不可能同意,

🏆 前端领域优质创作者 1万+

MAC (M1) 使用homebrew 安装 Mongodb (推荐简单操作)

官方有两种方法: (1).tgz压缩包下载安装配置 (2)使用hombrew包管理器安装 使用M1的首推使用hombrew进行mongodb安装(同时也是官方首推) 由于我用.tgz压缩包的方式没有安装成功,用homebrew成功,所以只介绍homebrew的方式。 话不多说,进入正题 安装:(以下指令均在macos 终端运行) (1)安装 Xcode Command-Line 工具 xcode-select --install (2) 安装Homebrew (操作连接在此,直

qq_41758969的博客 5059

边缘AI工业落地:YOLO26-Seg + RK3588 NPU 极致部署(低功耗+实时实例分割,工业场景全覆盖)

本次实战汇总了「YOLO26-Seg+RK3588 NPU」工业边缘部署中最常见、最致命的8个坑点,所有坑点均来自真实工业项目,解决方案均为零代码/一键操作,无需复杂配置,能让你少走90%的弯路,节省大量时间,必看必记!❌ RKNN转换报错「算子不支持/模型加载失败」→ ✅ 导出ONNX时必须指定opset=12,重新导出即可,RK3588唯一兼容版本;❌ 分割mask错位/轮廓模糊 → ✅ 导出ONNX时加,并保证RKNN的归一化参数与YOLO26一致,零代码修复;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1717

MongoDB的安装避坑(踩坑)

MongoDB的安装避坑(踩坑) 下载 可以去官网下载:https://www.mongodb.com/download-center/community 安装 下载完了就可以使用安装包安装;我下载的mongodb版本是:v4.0.9. 一直下一步到这里,第一个是默认安装(一直下一步,无坑); 第二个是自定义安装(重点讲这里) 选择自定义安装,点...

David 705

4、基于抽象解释的静态分析器中的跟踪分区与ASTRÉE分析器解析

本博客探讨了基于抽象解释的静态分析器中的跟踪分区技术,并深入解析了ASTRÉE分析器的工作原理和应用。通过示例程序说明了跟踪分区如何提升分析精度,减少误报,以及ASTRÉE如何利用多种数值抽象域(如八角形域、浮点区间线性形式等)来处理复杂的嵌入式C程序。此外,还讨论了ASTRÉE的模块化设计、循环展开优化、用户断言与自动细化的局限性等内容,为保障嵌入式软件的安全性和可靠性提供了理论与实践支持。

kotlin6android的博客 117

基于STC8G1K08A单片机的EC11旋转编码器控制(江科大同款,代码可直接使用)

本文介绍了STC8G系列单片机与EC11旋转编码器的接口实现方案。硬件方面详细说明了EC11编码器的机械结构、电气特性及与单片机的典型连接电路,包括上拉电阻和消抖设计。软件部分重点阐述了状态检测算法,通过状态机和查找表实现方向判断,采用中断方式检测信号变化,并配合定时器进行软件消抖处理。文章还提供了完整的代码实现,包括GPIO初始化、中断服务函数、状态转换逻辑等关键模块,展示了如何通过串口输出验证旋转计数。最后讨论了抗抖动优化、高低速应用场景等实际问题解决方案。该方案在菜单导航、参数调节等场景中具有实用价值

weixin_74013772的博客 321

那些年,我用Thinkphp5集成mongoDB遇到的坑

据说Thinkphp5可以很方便的集成MongoDB,于是试了一下,结果全是坑啊,于是我就这样一步一步的踩过来了

maquealone的博客 6746

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

mongodb时间utc查询踩坑

$match匹配查询踩坑 带双引号的查不到,去掉双引号就可以有数据

尽力漂亮的博客 1140

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Windows安装配置MongoDB之踩坑记

一、安装MongoDB 先登录Mongodb官网https://www.mongodb.com/download-center#community 下载安装包。32位还是64位视情况而定。 下载完是这样的: 安装没什么特殊的,就是在“custom”时需要自定义安装路径修改下:D:\MongoDB 然后不断“下一步”,安装至结束。 这里有一个坑:在 Installing Mongo...

杜小白的博客 1019

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

MongoDB - 从0到1搭建MongoDB生产环境:避坑指南与最佳实践

本文详细介绍了从零开始搭建MongoDB生产环境的完整流程,包括硬件选型、安装配置、安全加固、高可用设计等关键环节。针对不同操作系统提供了安装指南,并分享了典型的生产环境配置文件示例,重点讲解了核心配置项的作用。文章强调生产环境必须考虑性能优化、安全防护和扩展能力,为开发者提供了实用的避坑指南和最佳实践,帮助构建稳定可靠的MongoDB生产系统。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

腾讯云MongoDB实测与避坑指南

# 腾讯云MongoDB实测与避坑指南 ## 一、基础高频场景实测 ### 1. 备份回档性能痛点与实测 在做游戏和电商业务时,最怕的就是数据库备份慢、回档卡,尤其是高并发场景下,传统MongoDB备份动辄数小时,回档更是让人等到怀疑人生。使用开源MongoDB做物理备份,每次都要拷贝全量数据文件,业务高峰期还会因为网络带宽打满导致实例抖动,踩过不少坑。 实测腾讯云MongoDB的excl

2501_92406411的博客 41

修改mongodb3.0副本集用户密码遇到的坑

最近公司对项目安全方面的问题很是重视,进行了多次各种安全漏洞的扫描,于是乎就扫到了mongodb弱口令的问题。在项目部署初期,因为大家对这个都不是特别重视,大概是因为觉得反正是内网项目吧,所以mongodb数据库的用户名和密码就都是admin。这次扫到弱口令之后,要求解决这个问题,于是任务便分到了我的头上。遵循强口令的标准,我把admin改成了由大写字母、小写字母、数字和特殊字符共同组成的密

程序员涂小哥的技术博客 1万+

MongoDB在JAVAWEB中那些坑

MongoDB基础配置使用啥的这里不讲,我们来讲那些让你一时找不到解决方法的坑。由于在家,好多代码没有,完全凭记忆,如有错误,请指正。 先布局,建个java实体 @XXXXXX("article") publicclassArticleimplementsj...

chuyikuang9423的博客 256

当Windows中已经下载了Mysql,MongoDb,Redis,WSL中下载必坑指南

建议根据官方先下载:https://www.mongodb.com/zh-cn/docs/manual/tutorial/install-mongodb-on-ubuntu/当在windows中安装并正在运行时,默认的端口好会被占用。如果wsl中的mongod启动状态,那么windows中也可以通过指定端口号连接。连接,会直接连接到windows下的mongod。若有错误与不足请指出,关注DPT一起进步吧!同理,是因为默认端口被占用,改变端口号即可。此时,应该会报错,就是由于端口被占用。

m0_66925868的博客 1085

mongodb各种坑

http://www.youkuaiyun.com/article/2012-11-15/2811920-mongodb-quan-gong-lue

longxibendi的专栏 1603
上一篇: 利用rocketchat 、hubot与jenkins集成完成ChatOps
下一篇: nodemcu esp8266 web配置wifi热点
join_null
博客等级 码龄11年 25粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值