伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

插入大量数据至MongoDB数据库的速度问题分析

来源:本站原创 浏览:143次 时间:2021-07-30

需求背景:某定时任务产生千条或更多JSON数据,本次数据还未完全写入数据库中,下一次定时任务的数据已经产生,由此而产生的数据拥堵怎么解决?

最初使用SpringBoot对MongoDB数据库做数据插入操作时,使用的是MongoTemplate中的save方法完成数据存储操作。

具体代码实现如下:

JSONArray为我从定时任务中获取到的数据。for (int i = 0;i < jsonArray.size();i++){     mongoTemplate.save(jsonArray.get(i),"存储的库名");}

此种方式存数据太慢,因为是遍历后一个一个存储,效率太低。

可以采用mongoCollection.insertMany()方法,此方法可以批量插入数据,效率很高

具体实现代码如下:

//首先,创建一个MongoDB连接数据库的工具类。//此类使用的是无密码连接数据库的方法,如果你的数据库有密码,请参照文章末尾的代码。那个代码是使用用户名、密码连接数据库的方法,代码摘自菜鸟教程,亲测有效。public class MongoDBJDBC {    static  String MONGO_IP = "数据库IP地址";    static  Integer MONGO_PORT = 数据库端口号,默认为27017;    public static MongoCollection getMongoDatabase(String databaseName,String collectionName){        MongoCollection mongoCollection = null; û��ϵ,����ν       try {            MongoClient mongoClient = new MongoClient(MONGO_IP,MONGO_PORT);            MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName);            mongoCollection = mongoDatabase.getCollection(collectionName);        }catch (Exception e){            System.out.println(e.getClass().getName()+":"+e.getMessage());        }        return mongoCollection;    }}获取到MongoCollection对象之后,使用其insertMany方法,插入一个集合。public void insertData(){//先使用remove方法,对某数据做删除,再做插入操作,以此实现批量数据的更新功能。        Query query = new Query(Criteria.where("busi_type").                           is(TransformTime.getStringDate()));        mongoTemplate.remove(query,"数据库中的集合名");            List<Document> list = //获取到需要插入到数据库中的方法。//使用工具类,获取到指定数据库的MongoCollection对象        MongoCollection mongoCollection = MongoDBJDBC.getMongoDatabase("数据库名","数据库集合名");        mongoCollection.insertMany(list);    }

MongoDB数据库有用户名、密码时,连接数据库的方法示例

import java.util.ArrayList;  import java.util.List;  import com.mongodb.MongoClient;  import com.mongodb.MongoCredential;  import com.mongodb.ServerAddress;  import com.mongodb.client.MongoDatabase;  public class MongoDBJDBC {      public static void main(String[] args){          try {              //连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址              //ServerAddress()两个参数分别为 服务器地址 和 端口              ServerAddress serverAddress = new ServerAddress("localhost",27017);              List<ServerAddress> addrs = new ArrayList<ServerAddress>();              addrs.add(serverAddress);              //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码              MongoCredential credential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());              List<MongoCredential> credentials = new ArrayList<MongoCredential>();              credentials.add(credential);              //通过连接认证获取MongoDB连接              MongoClient mongoClient = new MongoClient(addrs,credentials);              //连接到数据库              MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");              System.out.println("Connect to database successfully");          } catch (Exception e) {              System.err.println( e.getClass().getName() + ": " + e.getMessage() );          }      }  }

本文系投稿作品,点击阅读原文即可阅读原作者的博客,欢迎大家投稿!

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net