`
BigCat2013
  • 浏览: 52737 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MongoDB 在多线程高并发下的问题

阅读更多

最近项目用到 MongoDB , 主要是一些读取数据及改状态位的操作. 因为是结合了最近流行的 Storm进行大数据的分析处理,并将分析结果插入Vertica数据库,所以在多线程高并发的情境下, 会发现 Vertica 数据库中有部分重复的数据. 这到底是什么原因导致的呢?笔者开始也是一筹莫 展,重复去看 MongoDB 的 API , 终于有了新发现 :

com.mongodb.DB 这个类有三个很重要的方法 :

 

public abstract void requestStart() :
starts a new "consistent request". Following this call and until requestDone() is called, all db operations should use the same underlying connection. This is useful to ensure that operations happen in a certain order with predictable results.
public abstract void requestDone():
ends the current "consistent request"

public abstract void requestEnsureConnection():
ensure that a connection is assigned to the current "consistent request" (from primary pool, if connected to a replica set) 




具体再查了 MongoDB相关的文档才发现, mongodb 的java driver是不支持是事务性的,所以如果想保证在多线程高并发的情境下不出错(指定的一批数据在同一个底层的数据连接中完成),就必须在使用DB的时候加上上述三个方法。

按照 API 提供的方法说明,在项目代码获得DB的后面加上db.requestStart(),db.requestEnsureConnection(),然后在执行完数据库操作之后加上db.requestDone(),成功解决了数据重复的问题!

 

原创文章,转载请注明出处:

http://bigcat2013.iteye.com/blog/2109233

 

谢谢!

1
0
分享到:
评论
4 楼 你好嘚吧嘚 2019-04-25  
liubey 写道
NOSQL没有事务 常识性姿势

现在是2019年4月25日15:09:56,redis支持事物,mongodb的4.0+也支持了事物
3 楼 liubey 2014-08-27  
NOSQL没有事务 常识性姿势
2 楼 BigCat2013 2014-08-27  
其实这一系列操作无非就是在底层连接上加了线程锁,既然涉及到锁这个动作,自然就是影响了性能,但这个影响在 mongoDB 中很难体现,因为mongoDB Pool中的DB基本上是不会同时用完的,也就是说,一般情况下当你需要数据操作时,连接池中总可以拿出可用的DB给你使用(当你New 一个Mongo(或者MongoClient)是,其实就是创建了一个连接池,你可以从这个连接池中拿DB(Mongo默认最多是10个,MongoClient是100个),而且DB不需要你去关闭,当你执行完数据库操作时,会自动回收到连接池中待用)。
1 楼 sunwt 2014-08-27  
不知道这样对mongoDB的写性能是得到了提升还是减慢了呢?

相关推荐

    亲测可用基于 SpringBoot+Maven+Mybatis+Redis+RabbitMQ 高并发秒杀系统

    基于 SpringBoot+Maven+Mybatis+Redis+RabbitMQ 高并发商城秒杀系统; 开发工具IntelliJ IDEA 2017.3.1 x64; 项目搭建: 1、下载代码 将项目加载到IDEA里面 2、运行sql文件夹下的sql文件 3、到src/main/resources下...

    JAVA高并发高性能高可用高扩展架构视频教程

    java多线程编程 纯手写实现SpringIOC实现过程 JEE企业级开发(企业级项目开发权威指南) 网络爬虫之JAVA正则表达式 手写springMVC框架 老司机带你透析springMVC内部实现方式 打造高效代码结构(java性能优化) 新版本...

    springboot_mongodb

    3适用于无状态,副本变量独立后不影响业务逻辑的高并发场景。如果如果业务逻辑强依赖于副本变量,则不适合使用ThreadLocal解决,需要另寻解决方案的局部变量,而不是为了解决共享对象的多线程访问问题。实际上,...

    moja:moja(熔岩流)是一个跨平台,支持高并发,可集群部署的日志消息队列系统。使用到了Netty,Protobuf,JSON,MongoDB,HDFS,Zookeeper等技术

    3.存储端可自定义可配置,使用MongoDb可应对实时性的高并发写入需求 4.使用Zookeeper搭建ServerSocket端集群,实现高可用。 5.消息类型可以根据业务类型的不同设置不同的优先级,进行分开的批量化处理。 6.消息队列...

    比 MySQL 和 MongoDB 快10倍的 OLTP 关系数据库和文档数据库.zip

    全链路异步化,使用少量线程就能处理大量并发 可暂停的、渐进式的 SQL 引擎 基于 SQL 优先级的抢占式调度,慢查询不会长期霸占 CPU 创建 JDBC 连接非常快速,占用资源少,不再需要 JDBC 连接池 插件化存储引擎...

    java多线程tcpsocketserver源码-GreatLibraryList:大图书馆清单

    java多线程tcp socket server源码很棒的德尔福 精选的 Delphi 框架、库、资源和闪亮事物的精选列表。 灵感来自很棒的-...东西。 请注意,仅考虑开源项目。 死项目(3 年或更长时间未更新)主要被忽略,除了那些没有...

    Java全能学习面试手册——Java面试题库.zip

    82 多线程,高并发.pdf 83 多线程面试59题(含答案)_.pdf 84 分布式缓存 Redis + Memcached 经典面试题!.pdf 85 搞定 HR 面试的 40 个必备问题!.pdf 86 集合框架.pdf 87 精选7道Elastic Search面试题!.pdf 88 ...

    2023年Java大厂各知识点综合面试题.rar

    包含:Dubbo、JVM、Kafka、Linux、MongoDB、MyBatis、MySQL、Netty、Nginx、RabbitMQ消息中间件、Redis、Spring、SpringBoot、SpringCloud、SpringMVC、Tomcat、Zookeeper、并发编程、多线程、集合框架、乐观锁与...

    Java interview-高级Java面试题2019.zip

    Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客...包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE

    java 高级面试题总结。包含java核心知识、微服务、数据库、数据结构与算法、操作系统与计算机网络等。.zip

    Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客...包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE

    Mycat-server-1.6-RELEASE源码

    基于Nio实现,有效管理线程,解决高并发问题。 支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页。 支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。 支持通过...

    世上最全的java面试复习知识汇总,从基础到高阶,从八股文到实践,从入门到入土

    JAVA 基础 Spring 原理 微服务 Netty 与 RPC 网络 日志 Zookeeper ...多线程并发 设计模式 负载均衡 数据结构 加密算法 分布式缓存 机器学习 云计算 JVM Hbase MongoDB Cassandra Hadoop Storm YARN

    基于C#的游戏服务器后台.zip

    多线程/异步编程: C#提供了丰富的并发编程模型,如Task、async/await关键字以及ThreadPool,用于处理并发客户端连接、非阻塞I/O操作和后台任务。这有助于提高服务器的响应速度和吞吐能力。 网络通信: 使用诸如...

    Java程序员面试题全.zip

    Tomcat+Mysql+设计模式、JVM与性能优化知识点整理、MySQL性能优化的21个最佳实践、MYSQL、redis、spring、多线程、分布式、面试必备之乐观锁与悲观锁、面试必问并发编程高级面试专题、面试常问必备之MySQL面试55题、...

    2020 alibaba 大佬整理JAVA283页整理.zip

    本文档整整283页内容涵盖:java基础、多线程、JVM、Spring源码、java集合、Netty、RPC、kafka、RabbitMQ、MongoDB、数据库、算法与数据结构、分布式缓存、设计模式等等,以及进阶的分布式,大数据,机器学习,内容...

    网站架构技术

    多线程 资源复用 单例 对象池 数据结构 垃圾回收 存储性能优化 固态硬盘 RAID与HDFS 万无一失:网站的高可用性 高可性的度量与考核 度量 考核 高可用的网站架构 高可用的应用 高...

    扫描

    自己私下已经把WebAliveScan放在了多个版本但是仍然有很多问题无法解决:安装配置复杂,python线程锁导致并发问题等等....,所以干脆就用Golang重写了bscan 在如今的渗透测试中,基本上所有白帽子都知道信息收集在...

    notes:JavaJava后端工程师的学习笔记https

    多线程、锁、并发 框架 Spring , Mybatis , SpringBoot , SpringMVC ... 中间件 RPC , MQ , elasticsearch ... 操作系统linux 数据库 Mysql , MongoDB , HBase ... 优化 常用工具 git , svn , 效率 , aliyun , mac ,...

    java8源码-SpringTree:互联网通用技术

    java8 源码 SpringTree ...1.7提供的多线程框架已经与JDK 1.8 lamda的关系 采用工作窃取模式(当前线程任务执行完成,可窃取其他线程的执行任务),将大任务分解成多个小任务,最后将结果join 7:分布式锁 red

Global site tag (gtag.js) - Google Analytics