`

mongodb的使用

 
阅读更多

笔者经验尚浅,对于NOSql也是2014年初才正式接触,并且很遗憾的是,接触也只是自我学习为主,还未真正涉及到项目运用中。所以这里标题也用到了浅析二字。如有大牛接触过,且有幸被搜索引擎抓到,还请大牛不吝赐教或指点一二。

1.在NoSql领域中其实存在很多解决方案。除去Mongodb 还有 HBase、memcacheDB、neo4J等,但是这几种的设计模式各有千秋,也就是实现方式有所不同。如:Key-value、列存储、文档储存、图存储、对象存储、xml存储等,说白了就是存储的数据模型不同,但是其实都是NoSql的实现。

2.接触较多以及较为广泛的、或者是说较为人知的一个NoSql:mongodb,曾记得是一个南京的朋友向我提起过。我这人有个毛病就是如果别人说的技术我不会,我总会记录下来,然后不停的利用搜索引擎去需求讲解以及demo。当然这些也只能暂时停留在基础认知方面,对于真实在实际生产中是如何应用的,或者是在整体项目架构中其到底扮演什么角色还是难以明白,以及NoSql对于目前的关系数据库有哪些优点和不足还是不清楚。

3.其实笔者事先在网上也查了很多关于此方面的资料(mongodb 与 MySQL 的比较),并且通过实验也大概明白了或者说基本懂了mongodb的优势以及应用场景,所以笔者为了记录自己学习mongodb的过程要求自己写下博客作为记录。

4.网上有篇博文明确的给出了mongodb和mysql 在插入查询以及更新性能上做了比较:

http://blog.csdn.net/e421083458/article/details/8849247

大家可以去看看,上面说mongodb在速度上是mysql的2倍,其实正如大多数人来说2倍好像有点少了,的确其实我也感觉才2倍,虽然随着数据量的越来越大 速度的倍数肯定会增加,但是、、、、。因此自己还是需要自己亲身做一下实验。

编程工具:eclipse 

语言:java 6.0

数据库:Mysql  5.1

NoSql:mongoDb    win32-i386-2.6.1

驱动 Jar包:mongo-2.10.1.jar mysql-connector-java-5.1.6-bin.jar

测试1【单条插入】

测试2【100条插入-一个连接】

测试3【1000条插入-一个连接】

测试4【1000条插入-一个连接 mysql采取JDBC批量操作】

测试5【100万条插入-一个连接 mysql采取JDBC批量操作】

以上数据我就不分析了。可想而知如果100万条数据 如果我不用批量操作 那么那将有多慢啊!!!!!!

其实在web的应用场景下,并发问题就是同时多个数据库连接来对数据库进行操作,但是这些数据并不可以使用批量操作这样的场景来处理。

所以高并发其实类似于jdbc的 for循环单个插入提交一样,而且速度会更慢。如果是这样的话,那么这种情况 mongodb的效率就是很高的,而且面临高并发基本上没有什么压力。

数据库模式:用户建立连接-数据库引擎接受-数据库引擎解析sql语法-映射数据模型以及关系-建模并IO插入数据库存储文件

NoSql模式:用户建立连接-NoSql引擎接受-建模IO插入文件

 

其实我们可以认为 NoSql速度上比关系数据库快 在于 数据库引擎解析sql语法-映射数据模型以及关系-   时间都花在这些上面,当然这只是概念的说明一下,其实关系数据库插入一条数据要比这个复杂的多,也包括事务、索性、检查等一系列操作。

 

其实我们可以发现在 jdbc批量插入的原理是  将sql语句初始化好-然后将多条插入语句一并提交到数据库-数据库统一解析,最终入库 然后返回用户结果。所以批量操作节约的时间在于 发送sql 数据库引擎接受 以及返回结果这样的时间。所以数据在传送到数据库的过程中相当耗时以及在数据中数据插入的一个整体流程中。(跑题了)

 

那么我们知道了这些 ,我们可以分析一下Nosql的应用场景了。

mongo使用场合

    mongodb的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。mongo适用于以下场景:

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

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

  3.大尺寸、低价值的数据:使用传统的关系数据库存储一些数据时可能会比较贵,在此之前,很多程序员往往会选择传统的文件进行存储

  4.高伸缩性的场景:mongo非常适合由数十或者数百台服务器组成的数据库。

  5.用于对象及JSON数据的存储:mongo的BSON数据格式非常适合文档格式化的存储及查询。

  6.重要数据:mysql,一般数据:mongodb,临时数据:memcache

  7.对于关系数据表而言,mongodb是提供了一个更快速的视图view;而对于PHP程序而言,mongodb可以作为一个持久化的数组来使用,并且这个持久化的数组还可以支持排序、条件、限制等功能。

 8.将mongodb代替mysql的部分功能,主要一个思考点就是:把mongodb当作mysql的一个view(视图),view是将表数据整合成业务数据的关键。比如说对原始数据进行报表,那么就要先把原始数据统计后生成view,在对view进行查询和报表。从这个意义上,mongodb提供了一个更快速,更使用的view

 

 

不适合的场景:

  a.高度事物性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。

  b.传统的商业智能应用:针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。

  c.需要SQL的问题

  D.重要数据,关系数据

 

这里需要注意的是:在实际项目中为了减小开销传统关系数据库在web开发中  会采取连接池的方式 提高效率,而在mongodb中mongo实例化其实就是一个连接,默认貌似是10个,高并发会采取队列的方式等待 线程安全,当然去生产环境肯定是需要配置的,否则会发生问题,且下载的mongo 32位的 默认存储只是2个G左右(官方有详细说明),后续增加就会报错。(http://blog.csdn.net/aegoose/article/details/22396243)

~~~~仅供参考 后续将对mongodb分布式进行研究,也就是多个mongodb分布式方案,目的进一步提高效率

以及会对各大型网站架构中mongodb所扮演的角色进行分析,从而定位大型项目中的角色。

分享到:
评论

相关推荐

    MongoDB使用手册

    MongoDB使用手册是数据库管理员和开发者的宝贵资源,它涵盖了MongoDB的各种操作、管理以及最佳实践。MongoDB是一个流行的开源、非关系型数据库系统,以其灵活性、可扩展性和高性能著称。以下是一些核心的MongoDB知识...

    java中mongodb使用环境详细配置

    Java 中 MongoDB 使用环境详细配置 Java 中 MongoDB 使用环境详细配置是指在 Windows 平台(WinXP)上安装、运行、安装 Windows 服务的笔记,以作备忘。下面是一些重要的知识点: 1. MongoDB 的下载和安装 ...

    mongoDB使用.go

    mongoDB使用.gomongoDB使用.gomongoDB使用.go

    DB06_数据库MongoDB使用教程.doc

    "MongoDB使用教程" MongoDB是一个基于分布式文件存储的NoSQL数据库,具有高性能、灵活的数据模型和可扩展的架构。下面是MongoDB使用教程的详细知识点: 一、MongoDB Atlas 云数据库(免费) MongoDB Atlas是...

    Mongodb使用手册

    MongoDB使用手册是一份详尽的指南,专为想要深入理解和掌握MongoDB配置与使用的人士准备。MongoDB是一款流行的开源、文档型数据库系统,以其灵活性、可扩展性和高性能著称。这份手册将涵盖以下几个核心知识点: 1. ...

    mongodb 使用手册

    MongoDB 使用手册 MongoDB 是一个高性能、开源、无模式的文档型数据库,适用于现代应用程序开发。它以其灵活的数据模型、强大的查询能力以及分布式架构而备受青睐。本手册将涵盖MongoDB的安装、使用和基本语法,...

    mongodb使用大全

    MongoDB使用大全的知识点 NoSQL简介: NoSQL是一种非关系型数据库管理系统,其设计是为了应对大规模数据集的存储和管理。由于NoSQL数据库的灵活性和扩展性,它们在处理高并发和大数据方面具有显著优势。 MongoDB...

    mongodb使用方法

    mongodb数据库 Python 相互协作 使用 方法 介绍

    mongodb使用说明

    ### MongoDB使用说明 #### 一、MongoDB简介 MongoDB是一种开源文档数据库,它使用JSON-like的文档结构来存储数据,并提供了动态查询语言。MongoDB的设计目标是为Web应用提供可扩展的高性能数据存储解决方案。 ###...

    spark 连接 mongodb 使用例子

    本示例将讨论如何使用Java语言在Spark中连接MongoDB进行CRUD(创建、读取、更新和删除)操作,同时涉及到Spring框架和Maven构建工具。 首先,我们需要确保已安装并配置了Spark、Java、MongoDB以及Maven。在Java项目...

    使用MyBatisPlus的方式,优雅的操作MongoDB

    使用MyBatisPlus的方式,优雅的操作MongoDB使用MyBatisPlus的方式,优雅的操作MongoDB使用MyBatisPlus的方式,优雅的操作MongoDB使用MyBatisPlus的方式,优雅的操作MongoDB使用MyBatisPlus的方式,优雅的操作MongoDB...

    Thinkphp使用mongodb数据库实现多条件查询方法

    Thinkphp是一个基于PHP的轻量级框架,它支持多种数据库,包括关系型数据库如MySQL,和非关系型数据库如MongoDB。...这些改动可以帮助Thinkphp在结合MongoDB使用时,为开发者提供更加强大和灵活的数据库查询能力。

    mongoDB非关系型数据库安装以及使用指南

    本教程将引导你完成MongoDB的安装过程,并介绍其基本使用方法,适合在线教育初学者。 一、MongoDB概述 MongoDB是一款开源的文档型数据库,采用分布式文件存储,支持多种操作系统,包括Windows、Linux和macOS。它的...

    MongoDB使用

    13. **性能优化**:通过合理设置缓存、监控资源使用情况、调整硬件配置以及使用适当的索引策略,可以显著提升MongoDB的性能。 综上所述,MongoDB作为一款现代的数据库系统,具有高度可扩展性、灵活性和高性能的特点...

    imaxue#progress#mongodb使用方式1

    一、MongoDB基础使用步骤 二、mongodb数据库的使用方式 三、命令行下MongoDB的使用链接地址 四、mongodb的GUI软件robo 3t的使用

    Mongodb使用和部署ppt

    什么是Mongodb Mongodb的优势 CRUD 索引 Mongodb管理 安装部署

    mongodb-测试数据

    MongoDB使用JSON格式的文档(BSON)作为其数据存储单位,这种格式易于理解和处理,尤其适合处理结构松散或半结构化数据。数据库由集合组成,集合又由文档构成。它支持丰富的查询语法,可以进行复杂的聚合操作,同时...

    MongoDB入门教程 + 架构简析 + java使用MongoDB的简单程序

    1. 数据模型:MongoDB使用文档型数据模型,文档是BSON格式的键值对,类似于JSON对象。 2. 数据库和集合:数据库是存储数据的逻辑单元,集合是数据库中的逻辑表格,不预先定义列。 3. 查询语言:MongoDB的查询语言...

Global site tag (gtag.js) - Google Analytics