MongoDB数据库介绍和Java使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiangguangchao/article/details/83822426

MongoDB简介

        MongoDB是一个开源的面向文档存储的NoSQL数据库,它没有了表结构的概念和数据结构的限制;一个数据库包含多个集合,每个集合理论上包含无数个文档,每个文档就是一条记录;每个文档的格式都是BSON格式,BSON是一种类JSON的一种二进制形式的存储格式,简称Binary JSON;文档的最大存储空间是16M,当文件大小超过16M之后要使用MongoDB的GridFS;GridFS适合大文件的存储,本质上是将大文件拆成多个小文档进行存储。
        MongoDB其他特点如下:
        1、技术成熟,相关工具和文档支持较好,支持Java、C、C++、PHP等多种语言。
        2、可以创建数据镜像,扩展性强。
        3、在高负载的情况下,可以通过分片技术增加节点保证服务器性能,支持分布式集群。
        4、每个数据库都分成一个主数据库和两个从数据库,安全性高。
        5、支持完全的索引:单键索引、多键索引、数组索引、全文索引、地理位置索引。
        6、性能高且稳定。
        7、每个文档可以创建多个键值对,利于排序,业务开发更方便。

对Java语言的支持

        在 Java 程序中如果要使用 MongoDB,需要安装了 Java 环境及 MongoDB JDBC驱动。MongoDB JDBC驱动的名称叫做mongo-java-driver,只需要将该Jar包包含在classPath中或集成进项目中即可。
mongo-java-driver中提供的API简单易懂,操作非常简单,具体示例代码如下:
        1、 创建数据库示例代码如下:

            try {  
            //连接到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("username", "databaseName", "password".toCharArray());  
            List<MongoCredential> credentials = new ArrayList<MongoCredential>();  
            credentials.add(credential);  
              
            //通过连接认证获取MongoDB连接  
            MongoClient mongoClient = new MongoClient(addrs,credentials);  
              
            //连接到数据库  
            MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");  
            System.out.println("Connect to database successfully");  
        } catch (Exception e) {  
            System.err.println( e.getClass().getName() + ": " + e.getMessage() );  
        }  

        2、 创建集合示例代码如下:
mongoDatabase.createCollection("test");

        3、 插入文档示例代码如下:

         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("文档插入成功");  

        4、 更新文档示例代码如下:

//更新文档   将文档中likes=100的文档修改为likes=200   
collection.updateMany(Filters.eq("likes", 100), new Document("$set",new Document("likes",200)));  

        5、 删除文档示例代码如下:

//删除符合条件的第一个文档  
         collection.deleteOne(Filters.eq("likes", 200));  
         //删除所有符合条件的文档  
         collection.deleteMany (Filters.eq("likes", 200));  

        6、大文件存储(超过16M),GridFS使用示例如下:

//获取GridFS
GridFS gridFS = new GridFS(db, "fs");
//保存文件
File file = new File("c:\\testBig.zip");
GridFSInputFile gridFSFile = gridFS.createFile(file);
gridFSFile.save();
//查找文件
BasicDBObject query = new BasicDBObject();
query.put("filename", fileName);
GridFSDBFile gridFSOne = gridFS.findOne(query);

        MongoDB数据库中大文件(超过16M)存储情况如下:
1.png
        左侧集合中有两项,一个是fs.files,一个是fs.chunks。其中fs.files中存储文件的基本信息和此次记录的唯一ID,如上图所示。fs.chunks集合中分块存储实际的文件,每一块中都包含一个递增的序号和在fs.files对应的记录ID,如下图:
2.png

性能分析

        MongoDB的性能非常强劲和稳定,广受使用者的好评。根据MongoDB官网测试报告,最新版本的MongoDB3.0在性能表现上更是比以前提升了一大截。
        1、并发量
        在YCSB测试中,MongoDB3.0在100%写操作的情况下,可达225000 ops/sec;在95%读操作、5%写操作的情况下,可达300000 ops/sec;在50%读、50%写的情况下,可达150000 ops/sec。
        2、响应延迟
        在性能测试中仅仅监测并发量是不够的,我们还要考虑操作的响应延迟 。在读操作响应延迟上,MongoDB3.0稳定的保持在1ms甚至更小的数值内;在平衡(读写各50%)的工作负荷下,MongoDB3.0也能稳定的保持在1ms左右。
        YCSB测试配置如下:3千万的文档和3千万的操作;文档包含一个100字节的字段(总共151字节)。
        服务器都是具有下列规格的Softlayer 裸机:
        1、CPU: 2x Deca Core Xeon 2690 V2 – 3.00GHz (Ivy Bridge) – 2 x 25MB cache;
        2、 RAM: 128 GB Registered DDR3 1333;
        3、 Storage: 2x 960GB SSD drives, SATA Disk Controller;
        4、 Network: 10 Gbps;
        5、 Ubuntu 14.10 (64 bit);
        6、 MongoDB Versions: MongoDB 2.6.7; MongoDB 3.0.1
        详细测试报告见:https://www.mongodb.com/blog/post/performance-testing-mongodb-30-part-1-throughput-improvements-measured-ycsb

猜你喜欢

转载自blog.csdn.net/jiangguangchao/article/details/83822426