前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >继续造轮子-MongoDB写日志

继续造轮子-MongoDB写日志

作者头像
用户7386338
发布2020-05-29 11:04:03
4190
发布2020-05-29 11:04:03
举报
文章被收录于专栏:Java患者Java患者

继上一篇文章

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

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;
    }




}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java患者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MongoDB
  • MondoDB简单搭建
  • 效果
  • 读日志
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档