继续造轮子-MongoDB写日志

2020-05-29 11:04:03 浏览数 (1)

继上一篇文章

我造了一个轮子去写系统日志

MongoDB

MongoDB我们都知道是一个Nosql,其次MongoDB可以存储海量数据,正好满足我们的需求,日志本身就会很多,基本每一个操作可能都会保存一条日志记录,如果选用mysql或者oracle的话成本感觉相对较高,而MongoDB会存在少量数据丢失的情况,当然我们用来保存日志,少几条操作也没关系?是吧!

MongoDB是将数据存储为一个文档的格式,文档格式则类似于一个JSON对象。

代码语言:javascript复制
{
    name: "Zero",
    date: "2020-05-20",
    detail: "客户支付了十元",
    type: "payment"
}

MondoDB简单搭建

代码语言:javascript复制
package com.zero.na;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

/**
 * 芒狗DB 工具类
 */
public class MongodbUtil {

    private String DEFAULT_DATABASE_NAME = "test";

    private MongoClient mongoClient;

    private static MongodbUtil instance = new MongodbUtil();

    private MongodbUtil() {
        mongoClient  = new MongoClient("152.136.**.**", 27017);
    }

    public static MongodbUtil getInstance() {
        return instance;
    }

    // 插入
    public void insert(String collectionName, Document doc, Object id) {
        if (id != null) {
            doc.put("_id", id);
        }
        insertOne(DEFAULT_DATABASE_NAME, collectionName, doc);
    }

    private void insertOne(String default_database_name, String collectionName, Document doc) {
        MongoDatabase mongoDatabase = getMondoDatabase(default_database_name);
        mongoDatabase.getCollection(collectionName).insertOne(doc);

    }

    private MongoDatabase getMondoDatabase(String default_database_name) {
        MongoDatabase database = mongoClient.getDatabase(default_database_name);
        return database;
    }

}

在原有的写日志类中添加保存日志业务 WriteLogUtil.java

代码语言:javascript复制
 private void write(Map<String, String> item) {
        Document document = new Document();
        for (String key : item.keySet()) {
            document.put(key, item.get(key));
        }
        MongodbUtil.getInstance().insert("test", document, null);
    }

效果

读日志

代码语言:javascript复制
package com.zero.na;

import org.bson.Document;

import javax.print.Doc;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class WriteLogUtil {

    // 省略......


    private List<Document> query (String name) {
        return MongodbUtil.getInstance().query("test", name);
    }
}
代码语言:javascript复制
package com.zero.na;

import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import org.bson.BsonDocument;
import org.bson.Document;
import org.bson.conversions.Bson;

import javax.print.Doc;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.function.Consumer;

/**
 * 芒狗DB 工具类
 */
public class MongodbUtil {

    // 省略.....



    // 查询
    public List<Document> query(String collectionName, String params) {
        return queryList(DEFAULT_DATABASE_NAME, collectionName, params);
    }


    private List<Document> queryList(String default_database_name, String collectionName, String params) {
        MongoDatabase mongoDatabase = getMondoDatabase(default_database_name);
        MongoCollection<Document> collection = mongoDatabase.getCollection(collectionName);
        Bson filter = Filters.and(Filters.eq("name", params));

        FindIterable<Document> list = collection.find(filter);


        MongoCursor<Document> iterator = list.iterator();
        List<Document> result = new ArrayList<>();
        while (iterator.hasNext()) {
            Document item = iterator.next();
            result.add(item);
        }
        return result;
    }




}

0 人点赞