为什么使用MongoDB?

简介:

1.为什么要学习?

        项目需要,公司需要通过从以往的日志记录以及购买信息中挖掘有价值的信息,数据量大结构复杂;

        项目的需求决定要解决数据库高并发读写,海量数据的高效存储和访问以及高可扩展和高可用性等问题。

        mongoDB(非结构化数据库)不仅可以处理结构化数据,而且更适合处理非结构化数据(文本、图像、超媒体等信息)。它突破了关系型数据库结构定义不易改变而且数据定长的限制,在处理连续信息和非结构化信息中有着关系型数据库无法比拟的优势。

        MongoDB的优势:大数据量高性能,易扩展,高可用性,轻松实现大数据量的存储;完善的Java API,存储格式时JSON,对JAVA,JS来说非常好处理,运维起来很方便,清晰的版本控制,非常活跃的社区。

        关系型数据库不擅长:大量数据的写入;字段不固定,表结构变更;简单查询需要快速返回结果;

        MongoDB在各大互联网公司广泛使用,涉及范围广,使用简单。

2.MongoDB都有哪些特性?

        面向文档存储:BSON

        面向集合存储:易存储对象类型的数据。

        强大的查询功能:支持丰富的查询表达式。使用json形式的标记,可以查询文档中内嵌的对象及数组。

        完整的查询功能:全索引支持包括内嵌对象及数组。查询优化器生成高效查询计划。

        模式自由:集合中的键不要求一致,键值不要求一致的数据类型。不知道它的任何结构定义

        复制(主从复制/副本集)及自动故障转移:用于故障恢复,读扩展;Mongo数据库支持服务器之间的数据复制,支持主从模式        以及服务器之间的相互复制

        分片(自动分片):用于负载均衡,写扩展。支持水平的数据库集群,动态添加额外的机器

        GridsFS:避免文件系统对目录做文件数目的限制。不会产生磁盘碎片

        支持RUBY,PYTHON,JAVA,C++等多语言,多平台

        查询监视:监视工具用于分析数据库操作性能

        缓存服务:对关系性数据库数据进行缓存,减少数据压力

        自动处理碎片

三、MongoDB在数据库中存储二进制数据的解决方案?

       两种:第一种是像存储普通数据那样,将文件转化为二进制数据存入mongodb,第二种使用gridfs 

       第一种:先读取文件内容,然后塞进bson.binary.Binary对象里,最后像平常那样写入数据库;获取文件一样的简单,像平时那样查找数据,然后将二进制内容写入文件即可;

      第二种如果是大文件可以使用gridfs

      gridfs会把文件分成若干块来存储,每一块的大小默认为256K,所以,如果是小文件,就不要用gridfs来存储了,不然会浪费空间的,gridfs是MongoDB之上的分布式文件系统,可以使用mongodb的分片和复制机制,因为Mongodb分配数据空间时以2GB为单位,所以gridfs不产生磁盘碎片。


    本文转自爱情89757 51CTO博客,原文链接:
http://blog.51cto.com/59465168/1947902 ,如需转载请自行联系原作者




相关文章
|
前端开发 Java Spring
架构设计的分层架构
架构设计的分层架构
|
8月前
|
缓存 Java API
2025 年小白也能轻松上手的 Java 最新学习路线与实操指南深度剖析
2025年Java最新学习路线与实操指南,涵盖基础语法、JVM调优、Spring Boot 3.x框架、微服务架构及容器化部署,结合实操案例,助你快速掌握企业级Java开发技能。
732 0
|
8月前
|
人工智能 自然语言处理 监控
Browser Use 浏览器自动化 Agent:让浏览器自动为你工作
Browser Use是一款创新浏览器自动化框架,结合LLM智能与自动化技术,能理解自然语言指令,自主操作浏览器完成任务,如数据抓取、表单填写、自动化测试等。具备智能决策、自适应处理、自然语言交互和自我修正能力,简化复杂任务,提升效率。
|
缓存 索引
kibana上执行ES DSL语言查询数据并查看表结构与数据、删除索引、查看文件大小
kibana上执行ES DSL语言查询数据并查看表结构与数据、删除索引、查看文件大小
1239 0
|
Shell 开发工具 数据安全/隐私保护
milvus单节点安装教程
本文介绍了Milvus的安装与鉴权配置步骤。首先通过下载并执行.sh文件完成安装,命令为`wget`下载脚本和`bash standalone_embed.sh start`启动服务。若需开启鉴权,建议修改外部配置文件`user.yaml`中的`authorizationEnabled`选项为`true`,重启容器后,默认用户名密码为root/Milvus。此外,提供了Python验证连接的方法及修改密码的示例。参考资料包括官方文档和视频教程。
|
机器学习/深度学习 数据挖掘 vr&ar
时间序列预测利器:Sklearn中的ARIMA与状态空间模型
【7月更文第24天】时间序列预测是数据分析和机器学习领域的一个重要分支,它致力于从历史数据中挖掘规律,预测未来的发展趋势。在Python的Scikit-learn库中,虽然直接提供的时间序列预测模型不如专门的时间序列分析库如Statsmodels或Prophet那样丰富,但Scikit-learn的强大之处在于其模型的灵活性和集成能力,尤其是状态空间模型的实现,为自定义复杂时间序列模型提供了坚实的基础。本文将介绍如何使用Scikit-learn进行时间序列预测,重点聚焦在ARIMA模型(通过Statsmodels间接实现)和状态空间模型的使用上,并通过代码示例深入解析。
1759 0
|
存储 固态存储 数据库
|
存储 SQL 关系型数据库
什么是数据库存储过程?
【8月更文挑战第3天】
2676 11
什么是数据库存储过程?
|
JavaScript API
Options API:和compositionAPI分别是什么,有什么区别哇
Options API:和compositionAPI分别是什么,有什么区别哇
628 0
|
机器学习/深度学习
注意力机制(三)(不同注意力机制对比)
主要介绍了注意力机制的基本思想,以及注意力机制中一个常见的类型——自注意力机制。前面两篇文章为了帮助大家理解注意力机制的思想用了非常多的类比,以及联系生活实际。 然而,不管类比和联系多么恰当,这些做法多多少少都会让事物本身的特性被类比、联系后的事物所掩盖。