package com.labci.mongodb.test;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.apache.poi.ss.formula.functions.T;
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoIterable;
import com.robustel.iot.data.parse.entity.DeviceCommunicationModuleData;
import com.robustel.pl.util.utils.UUIDUtil;
/**
* 功能说明:java链接操作mongodb
*
* 思路:1.建立连接并验证 2.获取一个集合列表 3.获取选择第一
* 个集合 4.插入集合 5.查询集合
*/
public class MongodbTest {
static List<String> companyIds = new ArrayList<String>(500);
static List<String> deviceIds = new ArrayList<String>(20000);
static MongodbTest mo = new MongodbTest();
static MongoDatabase db = mo.connectMongoDB("link_user", "rlink", "123456".toCharArray());
/**
* 连接mongodb数据库服务,验证用户名密码
*
* @return
*/
private MongoDatabase connectMongoDB(String name, String databaseName, char[] pswd)
{
//创建个 credential对象
MongoCredential credential = MongoCredential.createCredential(name, databaseName, pswd);
//把对象传入mongoClient的构造方法中,说明:用户名密码端口啥的都正确会得到mongoClient,否则程序会报错
//mongodb还有很多种验证方式 详见:http://mongodb.github.io/mongo-java-driver/3.0/driver/reference/connecting/authenticating/
MongoClient mongoClient = new MongoClient(new ServerAddress("172.16.7.110", 27017), Arrays.asList(credential));
MongoDatabase db = mongoClient.getDatabase("rlink");
return db;
}
/**
* 获取一个文档
*
* @param db
*/
private MongoCollection<Document> getDBCollection(MongoDatabase db, String setName)
{
MongoIterable<String> cols = db.listCollectionNames();
for (String c : cols)
{
System.out.println("collectionName: " + c);
}
MongoCollection<Document> col = db.getCollection(setName);
if (col != null)
return col;
else
return null;
}
/**
* 插入一条数据
*
* @param col
* @param username
* @param password
*/
private void insertCollection(MongoCollection<Document> col, String username, String password)
{
Document doc =new Document();
doc.put("usename", username);
doc.put("password", password);
col.insertOne(doc);
;
}
private void insertMany(MongoCollection<Document> col,
List<Document> documents){
col.insertMany(documents);
}
/**
* 查找一个doc
*
* @param colName
*/
private void findColByColName(MongoCollection<Document> doc)
{
FindIterable<Document> mydoc = doc.find();
for (Document d : mydoc)
{
System.out.println(d.toJson());
System.out.println(d.toString());
}
}
public static String randomLonLat(double MinLon, double MaxLon, double MinLat, double MaxLat, String type) {
Random random = new Random();
BigDecimal db = new BigDecimal(Math.random() * (MaxLon - MinLon) + MinLon);
String lon = db.setScale(6, BigDecimal.ROUND_HALF_UP).toString();// 小数后6位
db = new BigDecimal(Math.random() * (MaxLat - MinLat) + MinLat);
String lat = db.setScale(6, BigDecimal.ROUND_HALF_UP).toString();
if (type.equals("Lon")) {
return lon;
} else {
return lat;
}
}
public static void main(String[] args){
for(int i=0;i<500;i++){
companyIds.add(UUIDUtil.getKeys());
}
for(int i=0;i<20000;i++){
deviceIds.add(UUIDUtil.getKeys());
}
Integer count = 200000;
Integer betch = 1000;
Random random = new Random();
ExecutorService exec = Executors.newFixedThreadPool(150);
while(count >0 ){
exec.execute(new MongodbWork(count,betch,random,exec));
count--;
}
}
static class MongodbWork implements Runnable {
Integer count;
Random random;
ExecutorService exec;
Integer betch;
String collectionName = "gps";
public MongodbWork(Integer count,Integer betch,Random random,ExecutorService exec){
this.count = count;
this.betch = betch;
this.random = random;
this.exec = exec;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() +"---"+count +"----"+betch+"---"+count);
List<Document> arrays = new ArrayList<Document>(betch);
for(int i=0;i< betch;i++){
Document mongoEntry =new Document();
mongoEntry.put("companyId",companyIds.get(random.nextInt(companyIds.size())));
mongoEntry.put("id",UUIDUtil.getKeys());
mongoEntry.put("createTime",new Date());
mongoEntry.put("deviceId",deviceIds.get(random.nextInt(deviceIds.size())));
mongoEntry.put("moduleCode","gps");
mongoEntry.put("deviceTime",new Date().getTime());
Map<String,Object> maps = new HashMap<String,Object>();
maps.put("longitude", randomLonLat(0, 2000, 0, 3000, "Lon"));
maps.put("latitude", randomLonLat(0, 2000, 0, 3000, "Lat"));
mongoEntry.put("fieldValue",maps);
arrays.add(mongoEntry);
}
MongoCollection<Document> doc = mo.getDBCollection(db, collectionName);
mo.insertMany(doc, arrays);
}
}
}
分享到:
相关推荐
该存储库显示了如何在包含RESTful Web服务的Web应用程序上使用Vert.x core , web和test模块以及mongodb和web客户端。 您将在此存储库中学到什么? 如何部署Verticle 如何创建和使用HTTP服务器 如何为Web服务创建...
##Prerequisites 确保您安装了以下软件: JDK 1.8 或更高版本MongoDb(在 OS X 上,您可以通过 Homebrew 安装它: brew install mongodb ) ##Usage 应用程序在端口8080上启动一个 HTTP 服务器来查询和操作数据库。...
java操作geoserver的工具类,包含mongodb和sqlserver创建数据存储的对象, 封装好了图层的shp发布,数据库空间表发布,图层列表查询,删除,发布样式,设置图层默认样式,发布带样式的空间表,删除样式,查询图层中心...
mongo-mapper 为MongoDB映射POJO并不容易。 感谢的新编解码器功能。 只需用注释标记您的实体,创建EntityCodec ! 然后使用标准方法从MongoDB存储和访问数据。 为什么是我们呢?... <version>1.x.x Gradle c
Vert.x 异步 Mongo DB Persistor Vert.x 模块使用 Java 的异步 Mongo DB 驱动程序来启用对数据库的异步调用,因此不必使用工作线程。 对数据库的所有操作都是非阻塞的。依赖关系该模块依赖于 [ MongoDB Driver)地位...
MongoDB连接器jar及其依赖项应添加到运行时(mongodb-java-driver-3.4.2,包括所有依赖项)。 要在各种Siddhi执行环境上安装第三方连接器,请参阅有关Siddhi文档部分。 安装 要在各种Siddhi执行环境上安装此扩展,请...
│ 第126节:Java操作MongoDB.avi │ 第127节:MongoDB和Spring.avi │ 第128节:应用建议及最佳实践.avi │ 第129节:MongoDB结合应用开发一.avi │ 第130节:MongoDB结合应用开发二.avi │ 第131节:应用MongoDB后...
本例是本人参考网上资料自行编写的,希望对感兴趣的朋友有所帮助(里面有mongodb的启动说明与shell命令操作说明)! MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可护展的高性能数据...
Couchbase 到 MongoDB ...安装 Couchbase 2.x 或 3.x,一定要导入 beer-sample 数据 MongoDB 安装 MongoDB 使用 MongoDB CB Data Replicator 导入 from 配置 Couchbase XDCR 以将数据发送到您的 Mo
这个C#实现的小游戏是一个简单的猜数字游戏,让玩家...Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
【博客个人资源】 包含前端、后端、移动开发、操作...Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
该项目利用了基于springboot + vue + mysql的开发...Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
这个C#实现的小游戏是一个简单的猜数字游戏,让玩家...Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
除了“常规” 操作外,该扩展还提供功能来管理存储在MongoDB中的任意大小的文档。 可以在上找到大量文档。 下载和发行说明在GitHub 页面上。 版本号 Mongrel 0.6.1需要eXist-db 3.0(或更高版本)。 函数名称空间...
该项目利用了基于springboot + vue + mysql的开发...Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
该项目利用了基于springboot + vue + mysql的开发...Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
该项目利用了基于springboot + vue + mysql的开发...Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
Mongodb实现文档操作 RabbitMQ实现延迟消息X OSS实现文件上传 启动redis docker命令: docker run -p 6379:6379 --name hx-redis -v $PWD/conf/redis.conf:/etc/redis/redis.conf -v redis-data:/data -d redis ...
该库可提供所有存储库和提供程序的完整实现,以使所有安全性持久存在于MongoDB中。 审批商店 ClientDetailsService ClientRegistrationService 令牌存储 UserDetailsManager ClientTokenServices 重要 该库...
使用Meteor全栈框架以JavaScript开发的Web聊天服务器+即时在线聊天源码大小:15.7MB开发语言:PHP+Mysql操作...技术特性:使用 Meteor,包括 Blaze 前端由 JavaScript 和 CoffeeSript 编写MongoDB (because of Meteor)