您现在的位置是:网站首页> 内容页

4.0.3的mongodb 安装和java使用

  • 金佰利真人游戏网址
  • 2019-04-01
  • 34人已阅读
简介一整合由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面。附上自己的github项目地址https://github.com/247292980/s

一 整合

由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面。

附上自己的github项目地址 https://github.com/247292980/spring-boot

附上汇总博文地址 https://www.cnblogs.com/ydymz/p/9391653.html

以整合功能

spring-boot,FusionChart,thymeleaf,vue,ShardingJdbc,mybatis-generator,微信分享授权,drools,spring-security,spring-jpa,webjars,Aspect,drools-drt,rabbitmq,zookeeper

 

这次就来整合下简单的mongodb 安装和java使用

二 安装

基于菜鸟 http://www.runoob.com/mongodb/mongodb-tutorial.html

1.官网安装,没什么好说的新手msi直接一路点下去,老手解压安装,那就更不用说了...

2.环境变量设置,这部很多教程不写,其实多个这玩意cmd用起来很舒服的

3.创建数据目录,data文件夹,conf文件夹,db文件夹,log文件夹

4.创建配置文件mongod.cfg和日志文件。配置文件自己修改成相应的地址

systemLog: destination: file path: D:mongodb-4.0.3datalogmongod.logstorage: dbPath: D:mongodb-4.0.3datadb

 

5.安装成服务

mongod --config "D:mongodb-4.0.3confmongod.cfg" --install

6.启动服务

net start MongoDBps.net stop MongoDB 停止服务mongod --remove 卸载服务

 

 

 三 使用

1.启动后台shell,

mongo

 第一次是这样的,他提示你要加个密码

 

2.选择admin数据库

use admin

3.创建用户

db.createUser( { user: "admin" //用户名 pwd: "123456" //密码 roles: [ { role: "root" db: "admin" } ] //权限 } )

ps.

user文档字段介绍: user字段,为新用户的名字; pwd字段,用户的密码; cusomData字段,为任意内容,例如可以为用户全名介绍; roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色;Built-In Roles(内置角色): 1. 数据库用户角色:read、readWrite 2. 数据库管理角色:dbAdmin、dbOwner、userAdmin; 3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager; 4. 备份恢复角色:backup、restore; 5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase 6. 超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase) 7. 内部角色:__system

 

3.卸载服务,重装再启动,注意--auth

mongod --auth --config "D:mongodb-4.0.3confmongod.cfg" --install

net start MongoDBnet stop MongoDB 停止服务mongod --remove 卸载服务

此时启动mongo不使用密码登录则看起来成功进入

实际

4.正确的启动

mongo --port 27017 -u "admin" -p "123456" --authenticationDatabase "admin"

 

四 语法

有兴趣的建议直接菜鸟找吧,了解一下即可

 

五 java使用

官方api我喜欢这样的官方! http://mongodb.github.io/mongo-java-driver/3.7/javadoc/

坑点一

百度上大多数教程只给了代码,但是依然不成功,因为少导了包,导致java.lang.NoClassDefFoundError: com/mongodb/DBObject

pom.xml

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver</artifactId> <version>3.8.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mongodb/mongodb-driver-core --> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-core</artifactId> <version>3.8.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mongodb/bson --> <dependency> <groupId>org.mongodb</groupId> <artifactId>bson</artifactId> <version>3.8.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>

坑点二

哪怕你绕开的包的坑,你还会进入一个权限验证的坑,主要是因为百度上的版本太低了,需要修改一下校验的版本...而我是直接从官网高最新版本的,这个bug就修复了。但是,配置方面有些许不兼容。例如,mongodb和spring-mongodb默认的认证机制不同。

1、mongodb的认证机制有2种:SCRAM-SHA-1和MONGODB-CR。3.0之后版本默认为:SCRAM-SHA-12、spring-mongodb默认为:MONGODB-CR,并不支持设置认证方式;但是,最新的包已修复这个问题

网上的教程,大多太旧了,所以出现jar包太老而是mongodb太老的问题,或者相反的问题,orz....其实一句话说就是注意版本或者最简单的就是直接用最新

所以,若是你中途觉得菜鸟写的很好,难免会进坑然后又来看我的文章,这时候,我建议你从来来一次...因为,我把前面的不兼容的错修改,但并没有重点指出,因为这只是版本问题。你直接再搞个低版本基本就不会有事了。

 

代码

public class MongoDBConnect { public static String HOST = "127.0.0.1" public static String PORT = "27017" public static void main(String[] args) { try { System.out.println("MongoDBConnect to database begin") //连接到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("admin" "admin" "123456".toCharArray()) List<MongoCredential> credentials = new ArrayList<MongoCredential>() credentials.add(credential) //通过连接认证获取MongoDB连接 MongoClient mongoClient = new MongoClient(addrs credentials) //连接到数据库 MongoDatabase mongoDatabase = mongoClient.getDatabase("admin") System.out.println("MongoDBConnect to database successfully") //创建集合// mongoDatabase.createCollection("test")// System.out.println("集合创建成功")//选择集合 MongoCollection<Document> collection = mongoDatabase.getCollection("test") System.out.println("集合 test 选择成功") /**插入文档 * 1. 创建文档 org.bson.Document 参数为key-value的格式 * 2. 创建文档集合List<Document> * 3. 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>) 插入单个文档可以用 mongoCollection.insertOne(Document) * */ Document document = new Document("title" "MongoDB"). append("description" "database"). append("likes" 100). append("by" "Fly") List<Document> documents = new ArrayList<Document>() documents.add(document) collection.insertMany(documents) System.out.println("文档插入成功") /**检索所有文档 * 1. 获取迭代器FindIterable<Document> * 2. 获取游标MongoCursor<Document> * 3. 通过游标遍历检索出的文档集合 * */ FindIterable<Document> findIterable = collection.find() MongoCursor<Document> mongoCursor = findIterable.iterator() while (mongoCursor.hasNext()) { System.out.println(mongoCursor.next()) } System.out.println("检索所有文档成功")//更新文档 将文档中likes=100的文档修改为likes=200 collection.updateMany(Filters.eq("likes" 100) new Document("$set" new Document("likes" 200))) //检索查看结果 findIterable = collection.find() mongoCursor = findIterable.iterator() while (mongoCursor.hasNext()) { System.out.println(mongoCursor.next()) } System.out.println("更新文档成功") //删除符合条件的第一个文档 collection.deleteOne(Filters.eq("likes" 200)) //删除所有符合条件的文档 collection.deleteMany(Filters.eq("likes" 200)) //检索查看结果 findIterable = collection.find() mongoCursor = findIterable.iterator() while (mongoCursor.hasNext()) { System.out.println(mongoCursor.next()) } System.out.println("删除文档成功") } catch (Exception e) { System.err.println(e.getClass().getName() + ": " + e.getMessage()) } }}

六 总结

关于mongodb,redis,mysql 简要对比,其实这篇文章写得很好,我给个结论就行了

https://www.cnblogs.com/lovychen/p/5613986.html

 

mongodb:

它是一个内存数据库,操作的数据都是放在内存里面的。

但实际数据存在硬盘中,mmap的方式可以说是索引在内存中。

持久化方式:

mongodb的所有数据实际上是存放在硬盘的,所有要操作的数据通过mmap的方式映射到内存某个区域内。mongodb就在这块区域里面进行数据修改,避免了零碎的硬盘操作。

至于mmap上的内容flush到硬盘就是操作系统的事情了,所以如果mongodb在内存中修改了数据后,mmap数据flush到硬盘之前,系统宕机了,数据就会丢失。

 

redis:

它就是一个不折不扣的内存数据库了。

持久化方式:

redis所有数据都是放在内存中的,持久化是使用RDB方式或者aof方式。

 

mysql:

无论数据还是索引都存放在硬盘中。到要使用的时候才交换到内存中。能够处理远超过内存总量的数据。

 

数据量和性能:当物理内存够用的时候,redis>mongodb>mysql当物理内存不够用的时候,redis和mongodb都会使用虚拟内存。mysql>mongodb>redis redis要开始虚拟内存,那很明显要么加内存条,要么你换个数据库了。mongodb不一样,只要,业务上能保证,冷热数据的读写比,使得热数据在物理内存中,mmap的交换较少。mongodb还是能够保证性能。有人使用mongodb存储了上T的数据。mysql根本就不需要担心数据量跟内存下的关系。不过,内存的量跟热数据的关系会极大地影响性能表现。

 

总结就是

虚拟内存不够是 选择mongodb和mysql

虚拟内存够是 选择mongodbredis

 

但实际上,更多公司选择redis和mysql,这就是技术栈的问题,毕竟nosql的定义和开发设计没几个程序员了解

 

1 0 9)

文章评论

Top