使用MongoDB做评论的原因是什么?

1.加载大量低价值的业务数据

数据量大 但自身价值比较低 。

例如我们更多的是关注文章本身内容 而不是数据量庞大的评论内容

2.评论的读写操作频繁 查询评论和发表评论

3.又因为评论本身的价值比较低 所以对事务的要求性不高。 所以mongodb舍弃了事务管理,评论功能又不需要关联查询,所以海量数据的查询也很快, 读写效率高

4.具有 内嵌模型和独特的 BSON文档结构的存储形式(具有object的数据类型 可以内嵌其他文档),查询很方便,不需要关联查询。所以很适合二级评论 ,在一次查询的过程中将自身评论内容和被评论的内容一同查询出来。【可以结合我们项目中真实的查询过程解释】

(BSON是一种类json的一种二进制形式的存储格式)

(mongoDB分为内嵌模型和引用模型)

MongoDB目前3大核心优势:『灵活模式』+ 『高可用性』 + 『可扩展性』,通过json文档来实现灵活模式,通过复制集来保证高可用,通过Sharded cluster来保证可扩展性。

应用场景:

业务需要事务,使用mysql,因为mongodb不支持事务
数据量大,但是数据本身价值不大,使用mongodb
ps:加载大量低价值的业务数据
数据是非结构化的,且数据量大,使用mongodb
业务未来走向不明确,使用mongodb,方便扩展
优势:

不存在SQL注入
不需要提前创建表,可以直接写入数据
字段数据格式自由 比如mysql中id 字段是数字,输入字符串会出错,mongodb不会
可以处理json结构,并对其进行处理
比如 字段a的值为
{“a”:11,”b”:12,”c”:”abc”,”d”:[1,2,3]}
你可以直接去读取或设置a字段的b值 a.b,读取a字段d数组的第二个值:a.d.1,可以去删除a字段的a数据$unset:{“a.a”:1},就会变成:
{“b”:12,”c”:”abc”,”d”:[1,2,3]}
可以使用upsert操作,修改的数据不存在的时候直接插入该数据
查询和插入效率在没有索引的情况下远大于mysql
缺点:

mongodb是nosql数据库,关系能力薄弱,不能使用join,union来联合查找
事务能力薄弱
效率存在波动性,不是很稳定
MongoDB可以将模式设计划分为内嵌模式和 引用模式

内嵌模式
简单来讲,内嵌模式就是将关联数据,放在一个文档中。例如以下员工信息采用内嵌模式了而存储在了一个文档中:

根据上面的描述可以看出,内嵌模型可以给应用程序提供很好的数据查询性能,因为基于内嵌模型,可以通过一次数据库操作得到所有相关的数据。同时,内嵌模型可以使数据更新操作变成一个原子写操作。然而,内嵌模型也可能引入一些问题,比如说文档会越来越大,这样就可能会影响数据库写操作的性能,还可能会产生数据碎片

我们下面的demo就采用内嵌模型实现。

引用模式
引用模式是将数据存储在不同集合的文档中,而通过关系数据进行关联。例如,这里采用引用模式将员工信息存储在了3个文档中,基本信息一个文档,联系方式一个文档,登录权限放在了一个文档中。每个文档之前通过user_id来关联。

使用内嵌模型往往会带来数据的冗余,却可以提升数据查询的效率。但是,当应用程序基本上不通过内嵌模型查询,或者说查询效率的提升不足以弥补数据冗余带来的问题时,我们就应该考虑引用模型了。

Original: https://www.cnblogs.com/lzbbbb/p/16526230.html
Author: 小北呦
Title: 使用MongoDB做评论的原因是什么?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/574653/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • java中使用ReentrantLock实现线程安全

    如下代码: class Window4 implements Runnable { private int ticket=100; //1、先定义一个变量 private Reen…

    Java 2023年5月29日
    071
  • SpringBoot+schedule+可以动态添加或删除定时任务

    转载:https://blog.csdn.net/Nicky_LC/article/details/106961779?spm=1001.2101.3001.6661.1&…

    Java 2023年5月30日
    095
  • AtomicInteger

    AtomicInteger ,一个提供原子操作的 Integer 的类,常见的还有AtomicBoolean、AtomicInteger、AtomicLong、AtomicRefe…

    Java 2023年6月9日
    0128
  • Spring系列4:依赖注入的2种方式

    定义2个简单的bean类,BeanOne 和 BeanTwo,前者依赖后者。 package com.crab.spring.ioc.demo02; public class Be…

    Java 2023年6月5日
    074
  • 保姆教程系列一、Linux搭建Nacos

    前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 简介: Nacos是阿里巴巴开源的一款支持服务注册与发现,配置管理以及微服务管理的组件。用来取代以前常用的注册中心…

    Java 2023年6月5日
    099
  • java实现冒泡排序-通俗易懂

    自己写的笔记可能有不对的地方,希望大佬指正!先说思路假设有一个数组是 arr = [24, 69, 80, 57, 13],分别对应的下标是 [0, 1, 2, 3, 4]现在需要…

    Java 2023年6月13日
    051
  • 指定一个目录下所有的java文件,把里面的内容格式化输出在md文件

    指定一个目录下所有的java 文件,把里面的内容格式化输出在md 文件 import java.io.;/ * @author Mxhlin * @Email fuhua277@1…

    Java 2023年6月7日
    053
  • Java list对象列表排序 实例

    package com.test; public class Bean { private String name; private int priority; public St…

    Java 2023年5月29日
    087
  • continue、break与goto语句

    1、含有continue与break的switch在for循环中的用法 输出: 执行循环前,i = 1,sum = 0continue跳出switch,中断当前循环,sum = 6…

    Java 2023年6月5日
    094
  • 搭建SpringCloud Alibaba鉴权中心服务(详细教程)

    鉴权中心服务 认识JWT json web token 是一个开放的标准 ,它定义了一个种紧凑的,自包含的方式,用于作为json对象在各方之间安全的传输信息 服务器鉴权完成之后 会…

    Java 2023年6月5日
    086
  • java 欢迎页 主页 设置为servlet的方法

    使用HTML标签跳转至servlet 使用JSP(自动跳转到Servlet)→Servlet→JSP的方式request.getRequestDispatcher(“M…

    Java 2023年5月29日
    097
  • 设计模式——结构性设计模式

    结构性设计模式 针对类与对象的组织结构。(白话:类与对象之间的交互的多种模式 类/对象适配器模式 当需要传入一个A类型参数,但只有B类型类时,就需要一个A类型的适配器装入B类的数据…

    Java 2023年6月14日
    073
  • Java集合,队列,链表总结

    面向对象 封装 – 隐藏对象的属性和实现细节,仅对外公开接口; 继承 – 子类继承父类的特征和行为; 多态 – 同一个行为具有多个不同表现形式或…

    Java 2023年6月7日
    093
  • MySQL事务隔离级别

    MySQL事务隔离级别 事务 事务是由单独的一个或者多个SQL语句组成,是一个最小的不可再分割的单元,这一组操作里面的所有的执行,要么全部成功、要么全部不成功。如果有一个执行不成功…

    Java 2023年6月15日
    076
  • springboot小结

    创建一个SpringBoot项目 创建项目注意点 然后选中自己需要的依赖 不过后期还可以自己导入不过比较麻烦 分析各种包 不过的文件夹需要自己建 图标写成这样放到public下面就…

    Java 2023年6月7日
    097
  • springboot集成rabbitmq

    主题交换机有fanout(扇形)、direct(直连)、topic(主题)三种。而主题交换机是可以通过配置包含前两种的,所以,本篇主要介绍主题交换机。 topic路由器的关键在于定…

    Java 2023年5月30日
    074
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球