最近项目用到 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
谢谢!
相关推荐
基于 SpringBoot+Maven+Mybatis+Redis+RabbitMQ 高并发商城秒杀系统; 开发工具IntelliJ IDEA 2017.3.1 x64; 项目搭建: 1、下载代码 将项目加载到IDEA里面 2、运行sql文件夹下的sql文件 3、到src/main/resources下...
java多线程编程 纯手写实现SpringIOC实现过程 JEE企业级开发(企业级项目开发权威指南) 网络爬虫之JAVA正则表达式 手写springMVC框架 老司机带你透析springMVC内部实现方式 打造高效代码结构(java性能优化) 新版本...
3适用于无状态,副本变量独立后不影响业务逻辑的高并发场景。如果如果业务逻辑强依赖于副本变量,则不适合使用ThreadLocal解决,需要另寻解决方案的局部变量,而不是为了解决共享对象的多线程访问问题。实际上,...
3.存储端可自定义可配置,使用MongoDb可应对实时性的高并发写入需求 4.使用Zookeeper搭建ServerSocket端集群,实现高可用。 5.消息类型可以根据业务类型的不同设置不同的优先级,进行分开的批量化处理。 6.消息队列...
全链路异步化,使用少量线程就能处理大量并发 可暂停的、渐进式的 SQL 引擎 基于 SQL 优先级的抢占式调度,慢查询不会长期霸占 CPU 创建 JDBC 连接非常快速,占用资源少,不再需要 JDBC 连接池 插件化存储引擎...
java多线程tcp socket server源码很棒的德尔福 精选的 Delphi 框架、库、资源和闪亮事物的精选列表。 灵感来自很棒的-...东西。 请注意,仅考虑开源项目。 死项目(3 年或更长时间未更新)主要被忽略,除了那些没有...
82 多线程,高并发.pdf 83 多线程面试59题(含答案)_.pdf 84 分布式缓存 Redis + Memcached 经典面试题!.pdf 85 搞定 HR 面试的 40 个必备问题!.pdf 86 集合框架.pdf 87 精选7道Elastic Search面试题!.pdf 88 ...
包含:Dubbo、JVM、Kafka、Linux、MongoDB、MyBatis、MySQL、Netty、Nginx、RabbitMQ消息中间件、Redis、Spring、SpringBoot、SpringCloud、SpringMVC、Tomcat、Zookeeper、并发编程、多线程、集合框架、乐观锁与...
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客...包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客...包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE
基于Nio实现,有效管理线程,解决高并发问题。 支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页。 支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。 支持通过...
JAVA 基础 Spring 原理 微服务 Netty 与 RPC 网络 日志 Zookeeper ...多线程并发 设计模式 负载均衡 数据结构 加密算法 分布式缓存 机器学习 云计算 JVM Hbase MongoDB Cassandra Hadoop Storm YARN
多线程/异步编程: C#提供了丰富的并发编程模型,如Task、async/await关键字以及ThreadPool,用于处理并发客户端连接、非阻塞I/O操作和后台任务。这有助于提高服务器的响应速度和吞吐能力。 网络通信: 使用诸如...
Tomcat+Mysql+设计模式、JVM与性能优化知识点整理、MySQL性能优化的21个最佳实践、MYSQL、redis、spring、多线程、分布式、面试必备之乐观锁与悲观锁、面试必问并发编程高级面试专题、面试常问必备之MySQL面试55题、...
本文档整整283页内容涵盖:java基础、多线程、JVM、Spring源码、java集合、Netty、RPC、kafka、RabbitMQ、MongoDB、数据库、算法与数据结构、分布式缓存、设计模式等等,以及进阶的分布式,大数据,机器学习,内容...
多线程 资源复用 单例 对象池 数据结构 垃圾回收 存储性能优化 固态硬盘 RAID与HDFS 万无一失:网站的高可用性 高可性的度量与考核 度量 考核 高可用的网站架构 高可用的应用 高...
自己私下已经把WebAliveScan放在了多个版本但是仍然有很多问题无法解决:安装配置复杂,python线程锁导致并发问题等等....,所以干脆就用Golang重写了bscan 在如今的渗透测试中,基本上所有白帽子都知道信息收集在...
多线程、锁、并发 框架 Spring , Mybatis , SpringBoot , SpringMVC ... 中间件 RPC , MQ , elasticsearch ... 操作系统linux 数据库 Mysql , MongoDB , HBase ... 优化 常用工具 git , svn , 效率 , aliyun , mac ,...
java8 源码 SpringTree ...1.7提供的多线程框架已经与JDK 1.8 lamda的关系 采用工作窃取模式(当前线程任务执行完成,可窃取其他线程的执行任务),将大任务分解成多个小任务,最后将结果join 7:分布式锁 red