mongodb+java实现日志的日活与月活查询

来源:互联网 发布:阿里云香港服务器快吗 编辑:程序博客网 时间:2024/06/14 17:19

业务介绍

前段时间有个日志统计的需求,是规范的登陆日志,估计一个月有几十万,放入hadoop太麻烦了,放数据库又怕后续数据量增加较快,于是尝试用mongodb来存储,后续进行统计。
mongodb是采用3.4, 2017年12月最新的是3.6

中文官网的文档(英文官网的文档访问太坑爹了)
http://www.mongoing.com/docs/crud.html

先查看下自己的系统,这里是选择用tar包来安装

[huge@ottnetwork-3 mongo]$ cat /proc/versionLinux version 2.6.32-504.el6.x86_64 (mockbuild@c6b9.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) ) #1 SMP Wed Oct 15 04:27:16 UTC 2014

安装配置mongo

安装按官网来就行了,但官网是最简化的部署,连配置文件都没有。。配置文件是要自己创建的。。 (官网 http://www.mongoing.com/docs/tutorial/install-mongodb-on-linux.html,配置文件可参考http://blog.csdn.net/tszxlzc/article/details/51097537,)

这边是把配置文件放在 /etc/mongodb.conf

dbpath=/data/mongodblogpath=/tmp/mongodb.log#fork=truelogappend=truebind_ip=0.0.0.0port=5001
  • 先不用auth启动(不用auth,即能在本机有大权限,这个过程中把用户和数据库给建立起来)
    启动:[路径]/mongod -config /etc/mongodb.config

  • 无用户登陆
    [路径]/mongo –port 5001

  • 添加管理用户
    (mongoDB 的用户有点特别,是跟着db走的,即一个用户是挂在哪个db下面的,如下面的语句是建一个admin用户在admin库下),admin库则操作者各用户

use admin db.createUser({user: "admin", pwd: "abc123", roles: [{role:"userAdminAnyDatabase", db: "admin"}]})
  • 在test数据库中创建用户
use testdb.createUser({user:'dgm',pwd:'dgm',roles:[{role:"readWrite",db:"test"}]})
  • 关闭mongod进程(ctrl+c), 使用auth启动
    /路径/mongod –auth -config /etc/mongodb.config

客户端访问

这里写图片描述

这里写图片描述

用户和权限相关内容https://www.cnblogs.com/shiyiwen/p/5552750.html

  • 进行操作:
db.cuser.find()db.cuser.find(    {       date:{$gt:'2017-05-15',$lt:'2017-05-17'}    })// 日活db.cuser.aggregate( [   { $match: { date:{$gt:'2017-05-15',$lt:'2017-05-17'} } },   {     $group: {        _id: {           account: "$account"        }     }   },   {     $group: {        _id: null,        count: { $sum: 1 }     }   }] )// 每天的数量db.cuser.aggregate( [   {     $group: {        _id: { $substrBytes: [ "$date", 0, 10 ] },        count: {$sum:1 }     }   }])

这个mongodb 和sql的对比挺有用。http://www.mongoing.com/docs/reference/sql-comparison.html

集成java-spring

需要用到三个jar

mongo-java-driver-3.2.2.jar
spring-data-commons-1.11.4.RELEASE.jar
spring-data-mongodb-1.8.4.RELEASE.jar

这三个版本是匹配 spring 4.1.6左右的,如果spring 版本低会抛:

java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotatedElementUtils.findMergedAnnotation(Ljava/lang/reflect/AnnotatedElement;Ljava/lang/Class;)Ljava/lang/annotation/Annotation;

可以升spring版本,如果不想换spring版本,那就把上面三个jar包的版本降低,可以用maven仓库jar一个个试.

  • xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans";xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";xmlns:mongo="http://www.springframework.org/schema/data/mongo";xsi:schemaLocation="http://www.springframework.org/schema/data/mongohttp://www.springframework.org/schema/data/mongo/spring-mongo.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.2.xsd">; <mongo:mongo-client id="mongo" host="xxxx"         port="5001" credentials="aaa:bbb@ccc" >         <mongo:client-options write-concern="SAFE" /> </mongo:mongo-client> <mongo:db-factory id="mongoDbFactory"     dbname="test" mongo-ref="mongo" />

credentials是 “数据库用户名:数据库用户密码@默认数据库名”

  • 设置一个对应表的javabean,JCActivityDevice.java
import org.springframework.data.mongodb.core.mapping.Document;/** * mongodb 激活日志collection *  * @version 1.0 * @author */@Document(collection="jc_activity_device_log")public class JCActivityDevice implements Serializable {    private String date;    private String resultmessage;    private String usertoken;    private String userid;    private String mac;    private String Source;    private String result;    private String Model;    private String userIp;    private String serverIp;    private String sn;    private String account;    private String exetime;
  • 调用mongodb方法:
    @Resource(name="mongoTemplate")    private MongoTemplate mongoTemplate;   mongoTemplate.insert(entity);

spring-mongodb的官方文档
https://docs.spring.io/spring-data/mongodb/docs/1.10.9.RELEASE/reference/html/#mongo.core

原创粉丝点击