Mongodb的亿万级数据集合中提取字段的所有不同值集合
来源:互联网 发布:纸模型软件 编辑:程序博客网 时间:2024/05/02 04:46
对于互联网公司来说,随着业务的不断发展,后台保存的各种数据也会越来越多,在这篇文章中,简单讲述一下自己在工作过程中遇到的一个小的统计需求工作,希望对有需要的人有所帮助。
需求:需要统计我们后台数据库(Mongodb)保存了多少用户手机号码,数据库集合中的每条记录都有一个手机号码,但是不同记录的手机号码可能是相同的,但是这里的数据库集合数据量较大,将近六七千万记录的级别。
也许刚开始会想到的是distinct方法,但是这个方法在处理这么大的集合时,毋庸置疑会失败的。下面讲一种我实现的方法。
首先我们将需要统计的集合中你想要的字段值全量导出来,这可以通过Mongdb自带的集合导出工具mongoexport来实现,具体如下:
./bin/mongoexport -d Auth -c TokenCaller --csv --fields Caller -o callers_csv.dat
在上面的语句中,把Auth数据库中TokenCaller集合里面的Caller字段值进行全量导出到callers_csv.dat文件中,通过计算导出的文件应该在1G左右。
接下来就需要对所有的号码进行去重。我们知道Linux下有一个指令uniq,但是这个指令只会对相邻的两行就行比较并且去重,如果不相邻,则无法实现去重,怎么办呢?
这时候我们需要用到下一个命令sort,使用sort来先对这个文件里面的所有行进行排序,这样相同的值肯定在相邻的位置,这样去重就不会有什么问题了。
于是有了下面的命令:
cat callers_csv.dat | sort | uniq > uniquecaller.txt
通过执行该命令后,我们就能在uniquecaller.txt中看到所有的不同手机号码记录了。
如果你的集合比亿级别还大,通过上面的方式处理不成功的话,那么你还可以将这个callers_csv.dat文件先进行分割成小文件,然后对这些小文件先进行去重,将去重后的小文件再进行汇聚成一个大文件进行排序。
0 0
- Mongodb的亿万级数据集合中提取字段的所有不同值集合
- 亿万数据量级mongoDB中高效查找同一字段的所有不同值集合
- Mongodb的集合插入一个字段
- 每天一道LeetCode-----找到给定序列中所有和为某个值的集合或集合个数,序列中可以有/无重复项,集合元素顺序不同算不同集合等
- MongoDB中关于查询条件中包含集合中字段的查询
- sql怎样选择字段中所有的不同的值?
- java读取mongoDB某个数据库的集合的指定字段值,并存入mysql数据库指定表中
- 给定不同数字的集合,返回所有可能的排列。
- JAVA中如何取出两个不同List对象(对象一致)中所有不同的对象的集合
- 反射-获取类及其父类中声明的所有字段集合
- 得到 集合中不同的部分
- JAVA中不同集合的理解
- MongoDB中修改集合中的某个元素的值
- 集合的所有分割
- set应用:提取文本中所有不同的单词
- 集合(2)把一个list集合中特定字段插入到另一个集合的特定字段中
- 集合中取集合的值
- 数据库提取的无限级数据排序
- thinking in java test练习(13)(14)
- C# Lambda表达式
- Android SystemUI 信号栏后添加信号图标
- matlab图形绘制示例
- Pascal中的素数筛选
- Mongodb的亿万级数据集合中提取字段的所有不同值集合
- 7E加码解码
- Android SystemUI状态栏添加图标
- MVP初级学习
- 【NOIP2013提高组】花匠
- Linux Framebuffer 截屏方法
- Javascript中的素数筛选
- windows下忘记密码重置mysql密码的步骤
- linux 下安装zookeeper及配置dubbo