引入mongoDb 依赖
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.8.1</version> </dependency>
类比JDBC写法,相对比较偏底层
package com.lf; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; import com.mongodb.Mongo; import com.mongodb.WriteResult; public class MongoCRUDTest { public static void main(String[] args) { Mongo mongo = new Mongo("192.168.25.128",27017); DB db = new DB(mongo,"lf-demo"); DBCollection collection = db.getCollection("member"); //类比JDBC DBObject dbObject = new BasicDBObject(); dbObject.put("name", "lf"); dbObject.put("age", "18"); dbObject.put("addr", "anhui hefei"); WriteResult insert = collection.insert(dbObject); System.out.println(insert+"---------"); DBCursor dbCursor = collection.find(); for(Object obj : dbCursor){ System.out.println(obj); } } }
官方快速入门demo
package com.lf; import java.util.Arrays; import org.bson.Document; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; public class MongoTest { public static void main(String[] args) { MongoClient mongoClient = MongoClients.create("mongodb://192.168.25.128:27017"); MongoDatabase mongoDatabase = mongoClient.getDatabase("lf-demo"); MongoCollection<Document> collection = mongoDatabase.getCollection("lf-member"); Document document = new Document("name", "lf").append("age", "18") .append("address", Arrays.asList("anhui", "hefei")) .append("position", new Document("x", "125").append("y", "172")); collection.insertOne(document); } }
mongoDB框架:封装了mongoDB基本的操作
Morphia mongoDb的第一个orm框架(spring 的封装 mongoDBTemplate)
引入依赖
<dependency> <groupId>org.mongodb.morphia</groupId> <artifactId>morphia</artifactId> <version>1.3.2</version> </dependency>
创建MorphiaMember实体类
package com.lf.morphia; import org.bson.types.ObjectId; import org.mongodb.morphia.annotations.Id; public class MorphiaMember { @Id private ObjectId id; private String name; private int age; private String addr; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddr() { return addr; } public void setAddr(String addr) { this.addr = addr; } }
test
package com.lf.morphia; import org.mongodb.morphia.Datastore; import org.mongodb.morphia.Key; import org.mongodb.morphia.Morphia; import com.mongodb.MongoClient; public class MorphiaTest { public static void main(String[] args) { final Morphia morphia = new Morphia(); Datastore ds = morphia.createDatastore(new MongoClient("192.168.25.128",27017), "lf-demo"); MorphiaMember morphiaMember = new MorphiaMember(); morphiaMember.setAddr("anhui hefei"); morphiaMember.setAge(18); morphiaMember.setName("lf001"); Key<MorphiaMember> key = ds.save(morphiaMember); System.out.println(key.getId()); } }
输出:5cbf34e2ee1cd4337cec8875
mongoDB的一些疑问及解答
1、怎么配置mongdb在centos启动时就默认启动?
利用网络资源(关键是思路)
2、怎么配置mongdb在centos启动时就默认启动
用户行为数据,数据量非常大
有一种后悔的感觉,想着更换平台
迁移会遇到一些问题
不要滥用,不要滥用,不要滥用
它是一个最像关系型数据库的非关系型数据库(给数据操作带来便利)
3、Mongo和ES对比
有elasticsearch 纯粹的是json(字符串)
mongo的优势是哪些
BSON GirdFS(复杂)
4、用户手机注册验证码存取适合用mongo吗?还是redis?
建议用Seesion,用Redis过时时间,不推荐用MongoDB
5、MongoDB应用场景
系统操作日志 可以的
那什么情况下适合mongo:
不规则日志:ELK, Log4J INFO,ERROR,WARN,DEBUG(字符串?)
Pattern,用正则去解析字符串,不止一个正则,
每一种日志格式都要编写一个正则去匹配
既然用正则麻烦,为什么还用ELK存储日志
你的系统已经平稳运行N年了(.Net,PHP、Java)
适合mongoDB:
规则日志:MongoDB,结构化的整理,
用户行为日志 operationTime creator type target
Timline,调用链路 invoker Time targetMethod args returnVal throws
持续增量(id + UpdateTime)
文件存储:GirdFS(文件存储系统)
不适合Reids:数据需要持久性的而且有一定的依赖性
适合Redis:数据会设置时效
分布式锁
用户登录token
数据库缓存中间件
6、能讲讲MongoDB(GridFS)、Hadoop、HBase对于数据存储得使用场景选择吗?
定位:
MongoDB,为一个结构化的缓存,由于设计原理不同,数据量是一定的瓶颈的。
HBase ,基于列簇扩展性,高可用程度会更加灵活,数量级和MongoDB也是有很大差异的。
HBase 通常会跟大数据联系在一起
MongoDB 顶多算是一个日志数据库,文件存储系统
7、Mongo怎么持久化的?
持久化都是用文件的形式存储,其实任何数据库都是用文件实现持久化的