mongodb-脏数据问题

采用多线程后, 发现最大的问题是redis和mongodb的脏数据问题

1, upsert 的脏数据问题

多线程对同一个collect进行upsert操作时, 会引发并发脏数据问题, 最开始的解决方案是 在之前和之后 使用 LOCK.lock() 和LOCK.unlock(), 后来无意看到一篇博客: http://www.bkjia.com/sjkqy/952435.html, 返现在springboot操作使用MongoTemplate时, 只需要在 查询的条件上添加 @Indexed 就可以解决

时间: 2024-11-05 02:18:45

mongodb-脏数据问题的相关文章

压缩 MongoDB 的数据文件

MongoDB采用了磁盘空间预分配的机制,为了避免磁盘碎片以及使用mmap后造成的近一步的内存碎片,但是随着数据的增删除改操作,数据文件不可避免的会产生空洞,造成磁盘空间和内存的浪费.本文说的是这方面的压缩,数据使用某些压缩算法进行压缩的讨论不在此范围. 在MongoDB 中,大概有两种方法可以解决这种问题,但是都不是无痛方式,所以并不推荐使用. 1.通过 repairDatabase 整理数据文件 repairDatabase 是MongoDB 内置的一个db 上的方法,调用这个方法,Mong

mongoDB 插入数据 用java实现

import java.net.UnknownHostException; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBObject; import com.mongodb.Mongo; /**  * 用java 往mongoDB插入数据  * @author wwd *  */ public class InsertD

MongoDB丢数据问题的分析

坊间有很多传说MongoDB会丢数据.特别是最近有一个InfoQ翻译的Sven的一篇水文(为什么叫做水文?因为里面并没有他自己的原创,只是搜罗了一些网上的博客,炒了些冷饭吃),其中又提到了丢数据的事情.大家知道作为一个数据库来说,数据的持久性基本上是数据库的最低要求了.如果MongoDB真的有那么糟糕的数据安全问题,它早就在技术选择众多的今天被无情地淘汰掉了.那么真相到底如何呢? 实事求是地来说,MongoDB确实在其发展的过程中,有一些数据持久化的问题没有处理好,特别是一些默认值的选定上.大部

MongoDB的数据复制和数据切片

MongoDB简介 MongoDB由C++开发,是NoSQL中比较接近关系型数据库的一种.MongoDB中的数据以类似于json的格式存储,性能非常优越,且支持大量的数据存储.但是MongoDB不支持事务性的操作,使得其适用场景受到限制. MongoDB副本集 MongoDB的数据复制有两种类型: 1)master/slave 2)replica set 第一种为类似于MySQL的主从复制模型,第二种为副本集复制方式.现在主要应用的为副本集复制模型.结构图如下: 一个副本集即为服务于同一数据集的

脏数据

从广义上看,脏数据是指没有进行过数据预处理而直接接收到的.处于原始状态的数据: 从狭义上看,是不符合研究要求,以及不能够对其直接进行相应的数据分析. 脏数据依据不同的分析目的有不同的定义,如在常见的数据挖掘工作中,脏数据是指不完整.含噪声.不一致的数据:而在问卷分析中,脏数据则是指不符合问卷要求的数据. 开发中: 脏数据是指源系统中的数据不在给定的范围内或对于实际业务毫无意义,或是数据格式非法,以及在源系统中存在不规范的编码和含糊的业务逻辑. 在数据库技术中,脏数据在临时更新(脏读)中产生.事务

(转)Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析

Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析 数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求. 二.解决方案: 1.通过高速服务器Cache缓存数据库数据 2.内存数据库 (这里仅从数据缓存方面考虑,当然,后期可以采用Hadoop+HBase+Hive等分布式存储分析平台) 三.主流解Cache和数据库对比: 上述技术基本上代表了当今在数据存储方面所有的实现方案,其中主要涉及到了普通关系型数据库(MySQL/PostgreSQL),NoSQL数据

Mongodb同步数据到hive(二)

Mongodb同步数据到hive(二) 1.            概述 上一篇文章主要介绍了mongodb-based,通过直连mongodb的方式进行数据映射来进行数据查询,但是那种方式会对线上的数据库产生影响,所以今天介绍第二种方式-BSON-based,即使用mongoexport将所需要的表导出到本地文件,文件个是默认为bson.然后将导出的bson文件put到HDFS文件系统里面,最后在hive里面创建相应的表来使用hive sql进行查询. 2.            导出文件 使

Hibernate脏数据检查

脏数据检查:    什么是脏数据?脏数据并不是废弃和无用的数据,而是状态前后发生变化的数据.我们看下面的代码:  Transaction tx=session.beginTransaction();  User user=(User)session.load(User.class,"1");//从数据库中加载符合条件的数据  user.setName("zx");//改变了user对象的姓名属性,此时user对象成为了所谓的"脏数据"  tx.c

如何使用R语言解决可恶的脏数据

转自:http://shujuren.org/article/45.html 在数据分析过程中最头疼的应该是如何应付脏数据,脏数据的存在将会对后期的建模.挖掘等工作造成严重的错误,所以必须谨慎的处理那些脏数据. 脏数据的存在形式主要有如下几种情况: 1)缺失值 2)异常值 3)数据的不一致性 下面就跟大家侃侃如何处理这些脏数据. 一.缺失值 缺失值,顾名思义就是一种数据的遗漏,根据CRM中常见的缺失值做一个汇总: 1)会员信息缺失,如身份证号.手机号.性别.年龄等 2)消费数据缺失,如消费次数.

Mongodb中数据聚合之基本聚合函数count、distinct、group

在之前的文章<Mongodb中数据聚合之MapReduce>中,我们提到过Mongodb中进行数据聚合操作的一种方式--MapReduce,但是在大多数日常使用过程中,我们并不需要使用MapReduce来进行操作,不然有点杀鸡用牛刀的感觉,在这边文章中,我们就简单说说用自带的聚合函数进行数据聚合操作的实现. Mongodb中自带的基本聚合函数有三种:count.distinct和group.下面我们分别来讲述一下这三个基本聚合函数. (1)count 作用:简单统计集合中符合某种条件的文档数量