Mongodb知识点

1.什么是NOSQL?

NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库(RDBMS)的数据库管理系统的统称。NoSQL用于超大规模数据的存储。

2.什么是MongoDB?MongoDB与MySQL的区别?

MongoDB是一个基于分布式文件存储的开源数据库系统。将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

MongoDB与MySQL的区别主要就是非关系型数据库与关系型数据库的区别,这篇文章介绍得比较详细:https://blog.csdn.net/gjc_csdn/article/details/80419997

3.关于副本集中的仲裁节点?

仲裁节点的职责就是是负责选举主节点,注意仲裁节点中不会存放数据。

有一种情况,当一个副本集中只有一个主节点和一个备用节点时,必须再添加一个仲裁节点,否则当主节点挂掉后,备用节点不会主动升级成为主节点。

另一种情况,当一个副本集中有一个主节点并且有两个以上的备用节点时,当主节点挂掉,无论该副本集中有没有仲裁节点,此时也会从备用节点中选取一个升级作为主节点。但是当只剩一个备用节点活着时,此时无论有没有仲裁节点,这个备用节点也不会升级成为主节点。

4.关于分片的问题?

配置服务器副本集,需要3个节点,虽然官方说可以设置1个或3个,但是经过测试,配置服务器副本集只设置一个节点时,无法使用mongos命令链接路由服务器。配置服务器副本集中的3个节点中不能设置仲裁节点否则在报错(Arbiters are not allowed in replica set configurations being used for config servers)。

5.MongoDB的主要特点?以及使用场景。

特点:1)面向文档存储的数据库 2)可以在任何属性上设置索引 3)支持多种编程语言 4)当负载增加时可以利用分片 5)提供副本集支持数据库复制 6)数据是键值对的数据结构

使用场景:

1)网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
2)缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。
3)大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择4)传统的文件进行存储。
高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。
5)用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询。

缺点:

1)因为MongoDB直接把索引放在内存中,因此理论上讲对于内存有一定的需求。

2) 因为没有恢复机制,因此要做好数据备份,建好副本集。

3 )因为默认监听地址是127.0.0.1,因此要进行身份验证,否则不够安全

6.MongoDB中存储数据的结构?

MongoDB中存储的对象时BSON,是一种类似JSON的二进制文件,它是由许多的键值对组成。

7.MongoDB的命名规则

1)“\0″不能使用

2)带有”.”号,”_”号和”$”号前缀的Key被保留

3)大小写有区别,Age不同于age

4)同一个文档不能有相同的Key

8.MongoDB在32位和64位系统上有什么细微差别?

journaling(日志)会激活额外的内存映射文件。这将进一步抑制32位版本上的数据库大小。因此,现在journaling在32位系统上默认是禁用的

9. journal回放在条目(entry)不完整时(比如恰巧有一个中途故障了)会遇到问题吗?

每个journal (group)的写操作都是一致的,除非它是完整的否则在恢复过程中它不会回放。

10.分析器在MongoDB中的作用是什么?

分析器就是explain 显示每次操作性能特点的数据库分析器。通过分析器可能查找比预期慢的操作。

11.命名空间(namespace)是什么?

在collection中,数据库名+集合名叫做名字空间。也就是一个集合的完整名。

12.如何执行事务/加锁?

因为mongodb设计就是轻量高性能,所以没有传统的锁和复杂的事务的回滚。

13.什么节点是副本集中的primary也叫master?什么是secondary或slave?

副本集中负责写入操作的节点我们称为主节点primary,当主节点挂掉后,另一个副节点secondary会转为主节点。

14.分片(sharding)和复制(replication)是怎样工作的?

分片可能是单一的服务器或者集群组成,推荐使用集群

15. 数据库的整体结构

键值对–>文档–>集合–>数据库

16. 当我试图更新一个正在被迁移的块(chunk)上的文档时会发生什么?

更新操作会立即发生在旧的分片(shard)上,然后更改才会在所有权转移(ownership transfers)前复制到新的分片上。

17.允许空值null吗?

用户不能够添加空值(null)到数据库丛集(collection)因为空值不是对象。然而用户能够添加空对象{}。

18.更新操作立刻fsync到磁盘?

不会,磁盘写操作默认是延迟执行的。写操作可能在两三秒(默认在60秒内)后到达磁盘。例如,如果一秒内数据库收到一千个对一个对象递增的操作,仅刷新磁盘一次。

19.为什么我的数据文件如此庞大?

MongoDB会积极的预分配预留空间来防止文件系统碎片。

20.启用备份故障恢复需要多久?

从备份数据库声明主数据库宕机到选出一个备份数据库作为新的主数据库将花费10到30秒时间。这期间在主数据库上的操作将会失败--包括写入和强一致性读取(strong consistent read)操作。然而,你还能在第二数据库上执行最终一致性查询(eventually consistent query)(在slaveOk模式下),即使在这段时间里。

21.我应该启动一个集群分片(sharded)还是一个非集群分片的 MongoDB 环境?

为开发便捷起见,我们建议以非集群分片(unsharded)方式开始一个 MongoDB 环境,除非一台服务器不足以存放你的初始数据集。从非集群分片升级到集群分片(sharding)是无缝的,所以在你的数据集还不是很大的时候没必要考虑集群分片(sharding)。

22.数据在什么时候才会扩展到多个分片(shard)里?

MongoDB 分片是基于区域(range)的。所以一个集合(collection)中的所有的对象都被存放到一个块(chunk)中。只有当存在多余一个块的时候,才会有多个分片获取数据的选项。现在,每个默认块的大小是 64Mb,所以你需要至少 64 Mb 空间才可以实施一个迁移。

23. 如果在一个分片(shard)停止或者很慢的时候,我发起一个查询会怎样?

如果一个分片(shard)停止了,除非查询设置了“Partial”选项,否则查询会返回一个错误。如果一个分片(shard)响应很慢,MongoDB则会等待它的响应。

24.MongoDB支持存储过程吗?如果支持的话,怎么用?

MongoDB支持存储过程,它是javascript写的,保存在db.system.js表中。

25.如果我在使用复制技术(replication),可以一部分使用日志(journaling)而其他部分则不使用吗?

可以。

26. 我可以把moveChunk目录里的旧文件删除吗?

没问题,这些文件是在分片(shard)进行均衡操作(balancing)的时候产生的临时文件。一旦这些操作已经完成,相关的临时文件也应该被删除掉。但目前清理工作是需要手动的,所以请小心地考虑再释放这些文件的空间。

27. 分片(sharding)和复制(replication)是怎样工作的?

每一个分片(shard)是一个分区数据的逻辑集合。分片可能由单一服务器或者集群组成,我们推荐为每一个分片(shard)使用集群。

常见的问题

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章