1.MySQL与MongoDB之间最基本的差别是什么?
MySQL
和
MongoDB
两者都是免费开源的数据库。
MySQL
和
MongoDB
有许多基本差别包括数据的表示
(data
representation)
,查询,关系,事务,
schema
的设计和定义,标准化
(normalization)
,速度和性能。
通过比较
MySQL
和
MongoDB
,实际上我们是在比较关系型和非关系型数据库,即数据存储结构不同。
2.MongoDB
成为最好
NoSQL
数据库的原因是什么
?
以下特点使得
MongoDB
成为最好的
NoSQL
数据库:
面向文件的
高性能
高可用性
易扩展性
丰富的查询语言
3.
分析器在
MongoDB
中的作用是什么
?
MongoDB
中包括了一个可以显示数据库中每个操作性能特点的数据库分析器。通过这个分析器你可以找到比预期慢
的读写操作,再利用这一信息确定是否需要优化,比如,可以确定是否需要添加索引。
4.
允许存储空值
null
吗
?
对于对象属性而言是可以使用
null
值。然而用户不能够直接添加
null
值到数据库
collection
因为空值不是文档对象。我
们可以使用添加空对象
{}
方式代替
null
值
5.
更新操作立刻
fsync
到磁盘
?
不会,磁盘写操作默认是延迟执行的。写操作可能在两三秒
(
默认在
60
秒内
)
后到达磁盘。例如,如果一秒内数据库收
到一千个对一个对象递增的操作,仅刷新磁盘一次。
(
注意,尽管
fsync
选项在命令行和经过
getLastError_old
是有效
的
)
(
老师认为这是拿来坑人的面试题
)
。
6.
如何执行事务
/
加锁
?
MongoDB
没有使用传统的锁或者复杂的带回滚的事务,因为它设计的宗旨是轻量,快速以及可预计的高性能。可以
把它类比成
MySQL MylSAM
的自动提交模式。通过精简对事务的支持,性能得到了提升,特别是在一个可能会穿过
多个服务器的系统里。
7.
为什么我的数据文件如此庞大
?
MongoDB
会积极的预分配预留空间来防止文件系统碎片
8.
启用备份故障恢复需要多久
?
从备份数据库声明主数据库宕机到选出一个备份数据库作为新的主数据库将花费
10
到
30
秒时间。这期间在主数据库
上的操作将会失败
--
包括写入和强一致性读取
(strong consistent read)
操作。然而,你还能在第二数据库上执行最终
一致性查询
(eventually consistent query)(
在
slaveOk
模式下
)
,即使在这段时间里。
9.
我应该启动一个集群分片
(sharded)
还是一个非集群分片的
MongoDB
环境
?
为开发便捷起见,我们建议以非集群分片
(unsharded)
方式开始一个
MongoDB
环境,除非一台服务器不足以存放你
的初始数据集。从非集群分片升级到集群分片
(sharding)
是无缝的,所以在你的数据集还不是很大的时候没必要考虑
集群分片
(sharding)
。
10.
分片
(sharding)
和复制
(replication)
是怎样工作的
?
每一个分片
(shard)
是一个分区数据的逻辑集合。分片可能由单一服务器或者集群组成,我们推荐为每一个分片
(shard)
使用集群。
11.
数据在什么时候才会扩展到多个分片
(shard)
里
?
MongoDB
分片是基于区域
(range)
的。所以一个集合
(collection)
中的所有的对象都被存放到一个块
(chunk)
中。只有
当存在多余一个块的时候,才会有多个分片获取数据的选项。现在,每个默认块的大小是
64Mb
,所以你需要至少
64 Mb
空间才可以实施一个迁移。
12.
我可以把
moveChunk
目录里的旧文件删除吗
?
没问题,这些文件是在分片
(shard)
进行均衡操作
(balancing)
的时候产生的临时文件。一旦这些操作已经完成,相关
的临时文件也应该被删除掉。但目前清理工作是需要手动的,所以请小心地考虑再释放这些文件的空间。
13.MongoDB
在
A:{B,C}
上建立索引,查询
A:{B,C}
和
A:{C,B}
都会使
用索引吗?
不会,只会在
A:{B,C}
上使用索引。
14.
如何理解
MongoDB
中的
GridFS
机制,
MongoDB
为何使用
GridFS
来存储文件?
GridFS
是一种将大型文件存储在
MongoDB
中的文件规范。使用
GridFS
可以将大文件分隔成多个小文档存放,这样我
们能够有效的保存大文档,而且解决了
BSON
对象有限制的问题。