由于项目性能需求,尝试研究mongodb的使用,与mysql的存储和读取性能进行比较。安装完成发现,其批量写入数据功能确实比mysql快,但是读取性能并不如mysql,但是由于其是文件型数据库,可能在内存操作点啥,会加快读取效率吧,直接读效率确实不太行。
但是既然研究了,得到的知识分享下,因为发现网上都是些在线安装或者使用4.几版本。
安装步骤
下载安装包:
mongodb-linux-x86_64-rhel70-7.0.2.tgz
mongosh-2.0.2-linux-x64.tgz
下载网站:MongoDB Enterprise Downloads | MongoDB
将安装包拖到centos系统内,使用命令解压
添加环境变量,找到/etc/profile文件,打开添加如下内容
#mongodb
export PATH=$PATH:/opt/mongodb-linux-x86_64-rhel70-7.0.2/bin
export PATH=$PATH:/opt/mongosh-2.0.2-linux-x64/bin
/opt/xxxxxx/bin,分别是俩个安装包内的bin文件夹。
配置完成后在终端应可看到mongod、mongosh指令
编写mongo启动配置文件,创建文件mongodb.conf
文件内容如下:
dbpath = /data/db #数据文件存放目录
logpath = /logs/mongodb.log #日志文件存放目录
port = 27017 #端口
fork = true #以守护程序的方式启用,即在后台运行
auth=true #需要认证。如果放开注释,就必须创建MongoDB的账号,使用账号与密码才可远程访问,第一次安装建议注释
bind_ip=0.0.0.0 #允许远程访问,或者直接注释,127.0.0.1是只允许本地访问
注:dbpath和logpath都需要手动创建一下,第一次运行时建议注释掉“auth=true”,想要验证时,再创建必要的帐号密码
启动mongo指令:
mongod --config xxxx/mongodb.conf
使用指令按照指定配置文件启动mongodb。
启动后使用“netstat -npl”,应能看到port所设置端口被启动监听
停止指令:
mongod --shutdown
终端使用
运行命令 “mongosh”
将自动进入本机的mongo服务,
创建用户如下:
创建了这个账户,就可以将配置文件内的“auth=true”注释去掉。
关闭和启动mongo后就可使用帐号密码登录。
其他终端指令操作,可自行百度和问Ai。
远程客户端访问
下载一个mongoDB Compass
安装包:mongodb-compass-1.40.4-win32-x64.exe
网站:MongoDB Compass Download (GUI) | MongoDB
该软件全为英文,可使用查看数据添加数据,其他复杂操作请自行研究。
执行exe将自动默认安装,桌面将自动打开。
输入访问地址:
mongodb://testmongo:123456@1.5.1.226:27017/
Java远程操作
引用maven包
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.10.2</version>
</dependency>
连接mongo
public static MongoClient mongoClient = null;
public static void initdb() {
mongoClient = MongoClients.create("mongodb://testmongo:123456@1.5.1.226:27017/");
}
连接表文件,连接表文件写入数据时,将直接创建对应的表文件
MongoCollection<Document> collection = mongoClient.getDatabase("logaudit").getCollection("logauditdb");
写入数据
Document document = new Document("name", data.name).append("notes", data.notes)
.append("type", data.type).append("rdevid", data.rdevid).append("priority", data.priority)
.append("ip", data.ip).append("port", data.port).append("r_protocol_id", data.r_protocol_id)
.append("sign_lag", data.sign_lag).append("r_cert_id", data.r_cert_id)
.append("channeltype", data.channeltype).append("linktype", data.linktype)
.append("protocolset", data.protocolset).append("collectCycle", data.collectCycle)
.append("takeovertype", data.takeovertype);
collection.insertOne(document);
添加单个索引
collection.createIndex(Indexes.ascending("fieldName")); // 将 "fieldName" 替换为您要创建索引的字段名
collection.createIndex(Indexes.ascending("fieldName"));
添加关联索引
collection.createIndex(new Document("devId", 1).append("type_name", 1));
关联查询
Bson query = Filters.and(Filters.eq("devId", 71),Filters.eq("type_name", "日志"));
// Document executionPlan = collection.find(query).explain();
FindIterable<Document> cursor = collection.find(query);
// 遍历查询结果
for (Document document : cursor) {
System.out.println("查询结果:" + document);
}
查看该查询使用的方案
Document executionPlan = collection.find(query).explain();
System.out.println(executionPlan.toJson());