mongodb+java實現日誌的日活與月活查詢

業務介紹

前段時間有個日誌統計的需求,是規範的登陸日誌,估計一個月有幾十萬,放入hadoop太麻煩了,放數據庫又怕後續數據量增加較快,於是嘗試用mongodb來存儲,後續進行統計。
mongodb是採用3.4, 2017年12月最新的是3.6

中文官網的文檔(英文官網的文檔訪問太坑爹了)
http://www.mongoing.com/docs/crud.html

先查看下自己的系統,這裏是選擇用tar包來安裝

[huge@ottnetwork-3 mongo]$ cat /proc/version
Linux version 2.6.32-504.el6.x86_64 ([email protected]) (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,)

安裝 二

可用源來安裝,如yum 和apt
這裏展示 yum方式
創建yum源文件:
vim /etc/yum.repos.d/mongodb-org-3.4.repo
添加以下內容:

[mongodb-org-3.4]  
name=MongoDB Repository  
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/  
gpgcheck=1  
enabled=1  
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

yum update
yum -y install mongodb-org
whereis mongod

啓動mongodb :systemctl start mongod.service
停止mongodb :systemctl stop mongod.service

配置與啓動

這邊是把配置文件放在 /etc/mongodb.conf

dbpath=/data/mongodb
logpath=/tmp/mongodb.log
#fork=true
logappend=true
bind_ip=0.0.0.0
port=5001
  • 先不用auth啓動(不用auth,即能在本機有大權限,這個過程中把用戶和數據庫給建立起來)
    啓動:[路徑]/mongod -config /etc/mongodb.config
    // 如果是yum ,則也可 systemctl start mongod.service

  • 無用戶登陸
    [路徑]/mongo --port xxxx

  • 添加管理用戶
    (mongoDB 的用戶有點特別,是跟着db走的,即一個用戶是掛在哪個db下面的,如下面的語句是建一個admin用戶在admin庫下),admin庫則操作者各用戶

use admin 
db.createUser({user: "admin", pwd: "abc123", roles: [{role:"userAdminAnyDatabase", db: "admin"}]})
  • 在test數據庫中創建用戶
use test
db.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/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
http://www.springframework.org/schema/beans
http://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);

參考

https://blog.csdn.net/chasonli666/article/details/87874334

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

發佈了62 篇原創文章 · 獲贊 17 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章