NoSQL   发布时间:2022-05-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了NOSQL-MongoDB简介大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

@H_404_2@MongoDB

MongoDB 是一个高性能,开源,无模式的文档型数据库,开发语言是C++。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。

@H_404_2@1.特点

@H_404_2@1.1 数据格式

在 MongoDB 中,文档是对数据的抽象,它的表现形式就是我们常说的 BSON(Binary JsON )

BSON 是一个轻量级的二进制数据格式。MongoDB 能够使用 BSON,并将 BSON 作为数据的存储存放在磁盘中。

BSON 是为效率而设计的,它只需要使用很少的空间,同时其编码和解码都是非常快速的。即使在最坏的情况下,BSON格式也比JsON格式再最好的情况下存储效率高。

对于前端开发者来说,一个“文档”就相当于一个对象:

{“name":"mengxiangyue","sex":"nan"}  

对于文档是有一些限制的:有序、区分大小写的,所以下面的两个文档是与上面不同的:

{”sex“:"nan","name":"mengxiangyue"}  
{"name":"mengxiangyue",simhei; Font-size:15px"> 另外,对于文档的字段 MongoDB有如下的限制:

_ID必须存在,如果你插入的文档中没有该字段,那么MongoDB会为该文档创建一个ObjectID作为其值。_ID的值必须在本集合中是唯一的。

多个文档则组合为一个“集合”。在MongoDB中的集合是无模式的,也就是说集合中存储的文档的结构可以是不同的,比如下面的两个文档可以同时存入到一个集合中:

{"name":"mengxiangyue"}  
{"name":"mengxiangyue",simhei; Font-size:15px"> @H_404_2@1.2 性能

MongoDB 目前支持的存储引擎为内存映射引擎。当 MongoDB 启动的时候,会将所有的数据文件映射到内存中,然后操作系统会托管所有的磁盘操作。这种存储引擎有以下几种特点:

* MongoDB 中关于内存管理的代码非常精简,毕竟相关的工作已经有操作系统进行托管。

* MongoDB 服务器使用的虚拟内存将非常巨大,并将超过整个数据文件的大小。不用担心,操作系统会去处理这一切。

在《Mongodb亿级数据量的性能测试》一文中,MongoDB 展现了强劲的大数据处理性能(数据甚至比Redis的漂亮的多)

另外,MongoDB提供了全索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。通常能够极大的提高查询的效率。

@H_404_2@1.3 持久化

MongoDB在1.8版本之后开始支持 journal,就是我们常说的 redo log,用于故障恢复和持久化。

当系统启动时,MongoDB会将数据文件映射到一块内存区域,称之为Shared vIEw,在不开启 journal 的系统中,数据直接写入shared vIEw,然后返回,系统每60s刷新这块内存到磁盘,这样,如果断电或down机,就会丢失很多内存中未持久化的数据。

当系统开启了 journal 功能,系统会再映射一块内存区域供 journal 使用,称之为 private vIEw,MongoDB默认每100ms刷新 privateVIEw 到 journal,也就是说,断电或宕机,有可能丢失这100ms数据,一般都是可以忍受的,如果不能忍受,那就用程序写log吧(但开启journal后使用的虚拟内存是之前的两倍)

@H_404_2@1.4 CAP类别

MongoDB 比较灵活,可以设置成 strong consistent(CP类型)或者 eventual consistent(AP类型)

但其默认是 CP 类型(了解更多)

@H_404_2@2. Node下的使用

MongoDB 在 node 环境下的驱动引擎是node-mongodb-native,作为依赖封装到 mongodb 包里,我们直接安装即可:

npm install mongodb

实例:

var mongodb = require('mongodb');

var mongodbServer = new mongodb.Server('localhost',27017,{ auto_reconnect: true,poolSize: 10 });
var db = new mongodb.Db('mydb',mongodbServer);

/* open db */
db.open(function() {
     Select 'contact' collection */
    db.collection('contact',function(err,collection) {
         Insert a data */
        collection.insert({
            name: 'Fred ChIEn',email: 'cfsghost@gmail.com',tel: [
                '0926xxx5xx','0912xx11xx'
            ]
        },if (data) {
                console.log('Successfully Insert');
            } else {
                console.log('Failed to Insert');
            }
        });

         querying */
        collection.find({ name: 'Fred ChIEn' },0); line-height:1.5!important"> Found this People */
            if (data) {
                console.log('name: ' + data.name + ',email: ' + data.email);
            } else {
                console.log('Cannot found');
            }
        });
    });
});

另外我们也可以使用MongoDB的ODM(面向对象数据库管理器)——mongoose来做数据库管理,具体参照其api文档。

@H_404_2@3. 优缺点

@H_404_2@优势

1. 强大的自动化 shading 功能(更多戳这里)

2. 全索引支持,查询非常高效;

3.面向文档(BSON)存储,数据模式简单而强大。

4. 支持动态查询,查询指令也使用JsON形式的标记,可轻易查询文档中内嵌的对象及数组。

5.支持 JavaScript 表达式查询,可在服务器端执行任意的 JavaScript函数。

@H_404_2@缺点

1.单个文档大小限制为16M,32位系统上,不支持大于2.5G的数据;

2.对内存要求比较大,至少要保证热数据(索引,数据及系统其它开销)都能装进内存;

3. 非事务机制,无法保证事件的原子性。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
  • 上一篇:NOSQL-Redis下一篇:CDIF通用设备互联框架

大佬总结

以上是大佬教程为你收集整理的NOSQL-MongoDB简介全部内容,希望文章能够帮你解决NOSQL-MongoDB简介所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: