×

mongodb

mongodb(mongodb是什么)

admin admin 发表于2023-03-17 08:59:36 浏览40 评论0

抢沙发发表评论

本文目录

mongodb是什么

MongoDB是一个基于分布式文件存储 的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构
非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点
类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

mongodb数据库适合做什么

mongodb众所周知不支持事务,所以需要强事务的业务根本不能考虑mongodb。
mongodb的优势就是文档存储:
1. 业务经常变动,需要不时的添加字段,那么mongodb比较适合,关系型数据库添加字段的复杂度也还好
2. 嵌套文档,业务数据比较复杂,适合嵌套文档式存储,那么mongodb非常合适,这个关系型数据库比较难搞,虽然MySQL和pg也有文档存储,但MySQL的不成熟,pg毕竟现在生产中使用还是偏少,个人也不了解,这里不谈。但这不仅仅这一点优势,具体下面会细说。
3. upsert支持,查询速度也不慢
4. 高可用的副本集支持
5. 查询语法非常丰富,嵌套文档查询功能非常强大,不是重度用户可能不能理解
下面说说一个具体的使用事例:
项目的一条数据在10kb左右,如果使用关系型数据库那么需要将这条数据拆分成大概几百条左右,建造多个表,设计较复杂,这种数据大概在一百万条左右,想想拆分后在十几亿的数据量就可怕。打平后的数据什么DB也都可以拿下,只是一百万变十几亿比较恐怖而已。
如果采用MySQL存储,每次查询需要使用外键查询多个表,从这些表中拉取数据,性能肯定要下降很多,比不上只在一个表查询,而且只拉取少两个数量级的数据。查询也还好,业务允许可以对结果做缓存,放到redis里去。
但是重点来了,需求要增量更新部分数据,这时候需要更新多个表,根本没法做到原子性(注意事务不是原子操作),当然也可以使用cas等技术补偿,达到最终一致性。但使用mongodb存储只需要update一条数据,对相应的嵌套文档中内容更新,可以做到原子性,是不是很方便?
推荐学习《python教程》
具体说说该项目的难点,查询无法使用缓存,可能会很吃惊,但是业务决定了确实做不了,而且增量更新的量达到上万的QPS,如果不能保证原子性想想多么可怕!
所以mongodb在这里帮了大忙,关系型数据库解决不了这个难题。
有人可能要问,mongodb没有事务,上游数据写入也会有问题,你不可能所有数据都存一个表吧?
当然不是的,我们mongodb里的数据是从MySQL中清洗出来存到mongodb中的,mongodb只做单点的业务需求,综合的数据还是在MySQL中。
此项目我们用了上百个副本集,保证系统的高可用,这些副本集配置只要一条shell就搞定,如果用MySQL的主从不知道怎么配(我自己不懂),估计DBA得忙死,而该项目完全不需要也没用到DBA。
说了这么多mongo的优点,也说说他的缺点:
1. 查询优化器和MySQL没法比
2. 不支持reload,只能冷重启,初始化配置的时候比较麻烦
3. 没有事务,不敢存储第一手数据,多用来做备份数据的存储
mongodb可以做很多事情,取决于你脑洞,性能不差,存一些相对不重要的数据,mongodb嵌套文档功能强大,多看看官方文档挖掘挖掘有用信息,每次都能发现惊喜。

mongodb是国产的吗

MongoDB最初是由MongoDB Inc公司所开发的,是个是美国公司。
MagicMongoDBTool工具是一款MongoDB的数据库管理工具,用来进行简单的数据库管理工作。此工具为国人开发,项目地址:MagicMongoDBTool,目前作者已经完成基本功能开.

mongodb使用场景是什么

使用场景:

(1)网站数据:MongoDB适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。

(2)缓存:由于性能很高,MongoDB也适合作为信息基础设施的缓存层。在系统重启之后,由MongoDB搭建的持久化缓存层可以避免下层的数据源过载。

(3)大尺寸,低价值的数据。

(4)高伸缩性的场景:MongoDB适合由数十或数百台服务器组成的数据库。

(5)用于对象及JSON数据的存储:MongoDB的BSON数据格式适合文档化格式的存储及查询。

mongodb设计特点:

(1)面向集合存储,容易存储对象类型的数据。在MongoDB 中数据被分组存储在集合中,集合类似RDBMS 中的表,一个集合中可以存储无限多的文档。

(2)模式自由,采用无模式结构存储。在MongoDB 中集合中存储的数据是无模式的文档,采用无模式存储数据是集合区别于RDBMS 中的表的一个重要特征。

(3)支持完全索引,可以在任意属性上建立索引,包含内部对象。MongoDB的索引和RDBMS 的索引基本一样,可以在指定属性、内部对象上创建索引以提高查询的速度。除此之外,MongoDB 还提供创建基于地理空间的索引的能力。

(4)支持查询。MongoDB 支持丰富的查询操作,MongoDB 几乎支持SQL中的大部分查询。

(5)强大的聚合工具。MongoDB 除了提供丰富的查询功能外,还提供强大的聚合工具,如count、group 等,支持使用MapReduce 完成复杂的聚合任务。

mongodb,redis,hbase,三者都是nosql数据库,他们的最大区别和不同定位是什么

1. 如果你对数据的读写要求极高,并且你的数据规模不大,也不需要长期存储,选redis;

2. 如果你的数据规模较大,对数据的读性能要求很高,数据表的结构需要经常变,有时还需要做一些聚合查询,选MongoDB;

3. 如果你需要构造一个搜索引擎或者你想搞一个看着高大上的数据可视化平台,并且你的数据有一定的分析价值或者你的老板是土豪,选ElasticSearch;

4. 如果你需要存储海量数据,连你自己都不知道你的数据规模将来会增长多么大,那么选HBase。

而对于分布式数据库的选择,初步来看实际上可以分为三类

1. 偏基于Hadoop体系架构和分布式存储的,类似HDFS库和HBase数据库,也包括中间类型MongoDB

2. 偏内存和缓存类的,类似Redis库

3. 偏全文检索类和数据分析类的,类似ElasticSearch和Solr库

MongoDB适合做商城app数据库吗

个人认为,MongoDB不太适合用作商城APP的数据库:

  • 能用是肯定能用的,但是不适合,开发过程中需要解决的问题会比较多且严峻;

  • 单独只使用MongoDB是不适合的,可以用它解决一部分的问题,也就是关系型数据库和MongoDB配合着使用。

MongoDB是什么,以及它的优点

概括地说一下MongoDB是什么:它是一个基于分布式文件存储的非关系型数据库;我们常见的MySQL、Oracle都是关系型数据库,数据在关系型数据库中都是通过表的格式展现,可以看做二维表格;而MongoDB中的数据,类似于JSON格式(BSON)。

MongoDB除了性能上的优势之外,我认为最大的优点就是数据模式自由,如果你愿意的话,可以将任何数据都保存到同一张表中(MongoDB中叫做Collection,等同于关系型数据库中的Table);

比如像这样,一条客户信息,一条产品信息,两条毫无交集的数据,可以保存到同一个Collection中(比较极端的做法,实际使用的时候还是要区分开):

为什么说MongoDB不太适合用作商城应用的数据库

  • 首先,商城应用对事务一致性要求非常高,而MongoDB在事务的支持上,比较晚熟;MongoDB在3.0左右的版本,开始支持单文档的事务,到了4.0以上的版本,开始支持多文档事务;MongoDB发展的越来越好,但是在事务支持上,和关系型数据库相比确实还是有差距。

  • 第二,通常商城相关的业务,表结构相对都是比较成熟且固定的,比如客户表、商品表、订单表、支付表等等,同一个维度的数据结构基本都是相同的,比如客户都会有姓名、手机号、收货地址,这并没有发挥MongoDB数据结构自由的优势,关系型数据库已经可以很好地支撑。

  • 第三,MongoDB在多表关联方面,优势不大,比如需要查询客户下面所有的订单,那么可能需要关联客户表和订单表;而让MongoDB来实现,订单可以作为客户下面的一个子文档来存储,大概就是这个样子:

总结来说,MongoDB更多适用于大数据量、高并发、弱事务、数据结构“随意”且“善变”的场景,是对关系型数据库的补充。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。

elasticsearch(lucene)可以代替NoSQL(mongodb)吗

首先需要明确一点的是,ElasticSearch和MongoDB是不同的技术选型,两者定位不同,是不能混为一谈和相互替代的。

ElasticSearch是企业级搜索引擎

ElasticSearch是用Java语言基于Lucene开发的分布式搜索服务器,对外提供RESTful API,而且慢慢演变成了数据分析和可视化系统(如:ELK)。

ES可以当成是一种特殊的NoSQL。

  • 优点:查询性能高、高效分词、支持各类复杂检索、支持海量数据存储;

  • 缺点:数据写入性能差、缺乏权限机制、mapping一旦确定就不好变更(索引重建很麻烦)、field是可以动态添加的不利于数据规范。

MongoDB是一款NoSQL数据库

MongoDB是用C++开发的一款NoSQL数据库(面向文档的数据库,BSON格式存储),虽然支持搜索功能,但是索引性能和精确度远不如ElasticSearch。

  • 优点:数据写入性能优于ElasticSearch(但比不上Redis)、数据约束性强、完善的权限机制;

  • 缺点:只适合数据存储、虽有全文检索但一个集合只能创建一个全文索引。

两者通常搭配使用

在实际项目中,我们通常是将ElasticSearch和MongoDB搭配使用的。MongoDB可作为持久化数据存储仓库,而ElasticSearch作复杂检索工作。千万不要把ES当数据库来使用,因为ES数据结构是不严谨的,一旦涉及索引重建数据全部会丢失,另外也导出不了SQL。

以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!

想用MongoDB取代MySQL可以吗

谢谢邀请。

我现在带的项目用到了MongoDB,本人对MongoDB也有一定的了解,下面我谈谈自己的看法。

先一句话概括:MongoDB和MySQL(关系型数据库)各有特点,它们适合的场景不同;而企业级应用的大部分场景,MongoDB是无法完全取代MySQL的。

MongoDB是什么

在分析这个问题之前,我们还是看看MongoDB的定义:MongoDB是一个数据库;再稍微详细一点儿,它是一个开源的、基于分布式文件存储的、非关系型数据库。

说到非关系型数据库,最有名的可能就是Redis了,它是一种Key-Value类型的数据库;而MongoDB,它是文档型数据库的一种,它的存储方式类似于JSON。

MongoDB的特性

MongoDB更多适用于大数据量、高并发、弱事务、不确定数据类型的应用;特别是这里的“不确定数据类型”,也是MongoDB最大的特点之一。

大家在用关系型数据库的时候,如果表中的数据量很大,想要给表添加一个字段,是一件很痛苦的事情;而MongoDB是无需事先创建表结构或修改表结构,所有的改变都是动态的。

MongoDB能否取代MySQL(关系型数据库)?

MongoDB不适用于高度事务性的系统,如果系统对数据的事务性要求很高,还是用关系型数据库比较合适。(MongoDB3.6对单集合的事务支持不错,据说4.0之后,对多集合的事务支持也可以,不过我没有深入研究过)

MongoDB的多集合关联也没有关系型数据库强大,不过MongoDB更擅长把几个表的信息,放在一个集合里面。

所以总结来说,关系型数据库和MongoDB是不存在谁替代谁的问题,他们应该是各有优势,相互补充的。就好像我们平时用的无线键盘和机械键盘一样,无线键盘灵活轻便、外观比较时尚,而机械键盘手感出色、跪着舒服,不伤膝盖,各有优势。

希望我的回答,能够帮助到你!我将持续分享Java开发、架构设计、职业发展等方面的见解,希望能得到你的关注;另外,关注我后私信【资料】两个字,可获取架构、大数据、面试等相关资料。

memcache、redis、mongodb优缺点是什么啊,怎么选

虽然都是nosql范畴,但是memcache、redis主要设计目的是做缓存使用

mongodb的核心是提供无模式文档结构的持久化存储,它的两个核心点:提供接近(其实差距挺大的)缓存服务器的速度和接近关系数据库API(这个已经差不多了,连接查询是弱点)的接口。

memcache、redis

如果是几年前,memcache、redis之间还有选择综合症,目前的市场,你可以直接选择redis,把精力完全放在redis身上去深入。

这是是市场反应,这个相信对你的选择有绝对说服力。

memcache在性能方面没有优势了,同时redis提供了更丰富的数据结构,各种原子操作,以及持久化(RDB/AOF)。如果你是小规模项目,你甚至可以直接用它设计消息订阅,使用它的即时消息订阅发布(你有消息持久化需求的话可以额外用redis的列表功能等定制)。

mongodb

相比redis和memcache,mongodb的性能差距就比较大了。mongodb最核心的是它提供的B树索引,这个为我们提供了范围查询的基础,4.0提供了事务后,才算真正可以勉强在某些场合替代关系数据库。动态性和内嵌设计后的便利操作,很适合做中间数据管理。

PS:我最先使用mongodb,其实主要是用它做LBS应用。

结束

如果你是中小项目,缓存使用redis是很合理的选择,mongodb可以暂不使用,mysql已经够用。

如果是大项目,相信你们的架构师会根据你们的实际需求来合理规划架构和选择的。