• MongoDB(3)--Java 操作 MongoDB 的 API


    引入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怎么持久化的?
    持久化都是用文件的形式存储,其实任何数据库都是用文件实现持久化的

     

  • 相关阅读:
    Java使用Apache Commons Exec运行本地命令行命令
    Win10安装PostgreSQL9.6
    软件工程学习笔记——软件工具
    软件工程学习笔记——软件过程模型
    软件工程学习笔记——软件过程
    软件工程学习笔记——软件生存周期
    软件工程学习笔记——软件工程基本原理
    MySQL学习笔记——MySQL5.7的启动过程(一)
    Windows下免费的屏幕录制软件——EV录屏——推荐
    SecureCRT 8.1破解方式
  • 原文地址:https://www.cnblogs.com/flgb/p/10759643.html
Copyright © 2020-2023  润新知