MongoDB总结

mongodb干货:https://yq.aliyun.com/articles/73664?utm_content=m_17179

1、MongoDB的关系就是表示多个文档之间的逻辑上的相互关系,文档之间通过嵌套或者引用来建立关系

MongoDB的关系可以是1-1,1-N,N-1,N-N

db.user.insert({"name":"ChenDang","address":[{"city":"厦门","province":"福建"},{"city":"福州","province":"福建"}]})

嵌入关系

这是就是嵌入关系,把用户的地址信息也插入到用户数据里。

引用关系在数据库设计时经常用到,把用户数据和地址数据分开,通过引用地址文档id,来建立关系

db.user.insert({"name":"ChenDang","address":[ObjectId("5bbd6956f3591d29cc76661b"),ObjectId("5bbd694af3591d29cc76661a")]})

这种方式获取地址信息,需要通过两次,第一次或者地址id,第二次根据地址id查询出详细地址。

地址查询

这是两种关系的数据查询。

第二种引用关系

 

MongoDB的原子性

mongodb不支持事务,所以无论什么设计,都不要要求mongodb保存数据完整性。

数据库的增加、删除、改,都是数据库的原子操作,这些操作要么保存到mongodb,要么不保存,不会存在没有保存完整数据的情况。

ObjectId是一个12个字节的BSON类型数据,有以下格式:

前面4个字节表示时间戳,接下来3个字节是机器识别码,紧接着2个字节是进程id组成的PID,最后三个字节是随机数。

Map-Reduce是一种计算模型,简单地说就是将大批量的数据分解成Map执行,然后将结果合并成最终数据结果(REDUCE)。

根据name进行分组,找出name值为xiamen的有几个文档

db.user.mapReduce(
    function(){emit(this.name,1);},
    function(key,values){
        return Array.sum(values)},
        {
            query:{name:"xiamen"},
            out:"post_total"
        })

首先.mongodb怎样使用内存

mongodb使用内存映射存储引擎,

  1. 它会把数据文件映射到内存中,如果是读操作,内存中的数据起到缓存的作用,如果是写操作,内存还可以把随机的写操作转换成顺序的写操作,总之可以大幅度提升性能。MongoDB并不干涉内存管理工作,而是把这些工作留给操作系统的虚拟内存管理器去处理,这样做的好处是简化了MongoDB的工作,但坏处是你没有方法很方便的控制MongoDB占多大内存,幸运的是虚拟内存管理器的存在让我们多数时候并不需要关心这个问题。
  2. MongoDB的内存使用机制让它在缓存重建方面更有优势,简而言之:如果重启进程,那么缓存依然有效,如果重启系统,那么可以通过拷贝数据文件到/dev/null的方式来重建缓存

mongo使用场合

    mongodb的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。mongo适用于以下场景:

  a.网站数据:mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。

  b.缓存:由于性能很高,mongo也适合作为信息基础设施的缓存层。在系统重启之后,由mongo搭建的持久化缓存可以避免下层的数据源过载。

  c.大尺寸、低价值的数据:使用传统的关系数据库存储一些数据时可能会比较贵,在此之前,很多程序员往往会选择传统的文件进行存储。

  d.高伸缩性的场景:mongo非常适合由数十或者数百台服务器组成的数据库。

  e.用于对象及JSON数据的存储:mongo的BSON数据格式非常适合文档格式化的存储及查询。

不适合的场景:

  a.高度事物性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。

  b.传统的商业智能应用:针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。

  c.需要SQL的问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值