• MongoDB及Mongoose的记录


    MongoDB是一种NoSQL的文档型数据库,其存储的文档类型都是JSON对象。

    在node.js中由于代码都是异步执行,且nosql也没有“事物”这一定义,所以日常使用中很难保证数据库操作的原子性。就是说,假设客户端连续两次发起同一事件将数据存入数据库,很可能会导致数据被“重复”保存(但实际上,MongoDB的“默认”不会创建重复数据,因为其“唯一键”_id是不会重复的)。一般的立马能想到的方法是在操作前进行检验,但是增加了多余的IO操作不说,对于批量数据库操作的时候力有不逮,且在高并发的情况下,仍然会有数据重复的风险,因为在异步执行中,我们无法保证哪个线程先执行哪个线程后执行。一个比较好的方法是给除去_id外的其他字段加上唯一索引。加上唯一索引后,就保证了这些字段不会重复,他会在插入重复错误的时候扔出一个错误。

    所以在mongoose中可以使用insertMany来执行批量插入,然后通过设置{ ordered:false }在吞掉错误,在mongoose的官方文档里,ordered为true意味着会在遇到第一个错误时会立刻抛出失败终止操作,为false时将在执行过程中忽略错误,待到所有操作完成之后再抛出错误,可以在错误中再查找哪些是因为重复而造成的错误。

    怎么说呢,orm既有它的好处也有坏处,对于编码,维护,防止注入等方面的好处明显,但是对于性能,内存的消耗,以及连表查询等复杂条件时的复杂有时也让人头疼。尽量分清楚场合,如写操作远多于读操作的时候。但是对于实际开发情况来说,除开关键部位,其余地方还是能用orm就尽量用,因为很多时候,性能不是最重要的,代码易于维护才是。

  • 相关阅读:
    Dapper缓冲的真正含义
    css字体变瘦,窄
    打印request的信息
    部分浏览器cookie无法传输cookie,谷歌51-66版本
    Vue点击div以外的地方使div消失
    MybatisPlus模糊查询(like),查询不到中文,却可以查询到英文和数字的一种解决办法
    看起来很唬人,然而却简单实用的CAP理论
    做业务系统研发如何做到认真负责?
    聊聊关于创业公司招聘技术负责人
    [系列] Go
  • 原文地址:https://www.cnblogs.com/JJCHEHEDA/p/9718103.html
Copyright © 2020-2023  润新知