1、mongodb中的分片
分片是将数据水平切分到不同的物理节点。当应用数据越来越大的时候,数据量也会越来越大。当数据量增长时,单台机器可能无法存储数据或可接受的读取吞吐量,利用分片技术可以添加更多的机器来应用数据量增加以及读写操作的要求。
2、mongodb支持的数据类型
- String
- Integer
- Double
- Object
- Object ID
- Arrays
- Datetime
- Code
- Regular Expression等
3、mongodb中的索引
索引用于高效的执行查询,没有索引的MongoDB将扫描整个集合中的所有文档,这种扫描效率很低,需要处理大量的数据。索引是一种特殊的数据结构,将一小块数据集合保存为容易遍历的形式。索引能够存储某种特殊字段或字段集的值,并按照索引指定的方式将字段值进行排序。
4、添加索引
在collection中,调用:
db.collection.createIndex()
5、查询集合中的文档
db.collection.find({key:value})
6、聚合
聚合操作能够处理数据记录并返回计算结果,聚合操作能将多个文档中的值组合起来,对成组数据执行各种操作,返回单一的结果。它相当于SQL中的count(*)组合 group by。对于MongoDB中的聚合操作,应该使用aggregate()方法:
db.collection_name.aggregrate(AGGREGRATE_OPRATION)
7、副本集(避免单点故障)
在MongoDB中副本集由一组MongoDB实例组成,包括一个主节点多个次节点,MongoDB客户端的所有数据都写入主节点(primary),副节点从主节点同步写入数据,以保持复制集内存储相同的数据,提高数据可用性。
8、在哪些情况下使用和不使用nosql数据库
关系型数据采用的是结构化数据,而nosql非关系型数据库采用的是键值对的方式存储数据。
使用nosql的情况有:
- 处理非结构化/半结构化数据时;
- 在水平方向进行扩展时;
- 随时应对动态增加的数据项时;
不使用nosql的情况:
- 考虑数据库的成熟度;
- 支持性;
- 管理以及专业性等问题时;
9、如何执行事务/加锁
mongodb没有使用传统的锁或者复杂的带回滚的事务,因为它设计的宗旨是轻量、快速以及可预计的高性能。可以把它类比成mysql mylsam的自动提交模式。通过精简对事务的支持,性能得到了提升,特别是在一个可能会穿越多个服务器的系统里。
10、更新操作会立刻sync到磁盘吗
不会,磁盘操作默认是延迟执行的。写操作可能在两三秒(默认69秒)后到达磁盘,通过syncPeriodSecs启动参数,可以进行配置。如,1秒内数据库收到1000个对一个对象递增的操作,仅刷新磁盘一次。
11、什么是集合Collection、文档Document,以及与关系型数据库术语类比
- 集合Collection位于单独的一个数据库MongoDB文档Document集合,它类似关系型数据库(RDBMS)中的表table。一个集合(Collection)内的多个文档(Document)可以有多个不同的字段。通常情况下,集合(Collection)中的文档(Document)有着相容的含义。
- 文档(Document)由key-value构成。文档(Document)是动态模式,这说明同一集合里的文档不需要有相同的字段和结构。类似于关系型数据库中table中的每一条记录。
- 与关系型数据库术语类比:
MongoDB | 关系型数据库 |
Databse | Database |
Collection | Table |
Document | Record/Row |
Filed | Column |
Embedded Documents | Table join |
12、MongoDB与MySQL的区别
形式 | Mongodb | MySQL |
数据库模型 | 非关系型 | 关系型 |
查询语句 | find()、find_one()等 | 传统SQL语句 |
架构特点 | 副本集以及分片 | 常见单点、M-S、MHA、MMM等架构方式 |
数据处理方式 | 基于内存,将热数据存在物理内存中,从而达到高速读写 | 不同的引擎拥有自己的特点 |
使用场景 | 事件的记录,内容管理或者博客平台等数据大且非结构化数据的场景 | 适用于数据量少且很多结构化数据 |
13、MongoDB与Redis的区别
形式 | MongoDB | Redis |
内存管理机制 | 数据存在内存,由Linux系统mmap实现;当内存不够时,只将热点数据放入内存,其他数据存在磁盘 | Redis数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的LRU算法删除数据 |
支持的数据结构 | 数据结构比较单一(BSON格式),但是支持丰富的数据表达 | Redis支持的数据结构丰富,包括hash、set、list等 |
性能 | 依赖内存,tps较高 | 依赖内存,tps非常高。性能上Redis优于MongoDB |
可靠性 | 支持持久化以及复制集增加可靠性 | Redis依赖快照进行持久化;AOF增强可靠性;增强可靠性的同时,影响访问性能 |
数据分析 | MongoDB内置数据分析功能(MapReduce) | Redis不支持 |
事务支持情况 | 支支持单文档事务,需要复杂事务支持的场景暂时不适合 | Redis事务支持比较弱,只能保证事务中的每个操作连续执行 |
集群 | MongoDB集群技术比较成熟 | Redis从3.0开始支持集群 |
选择MongoDB的原因:
- 架构简单
- 没有复杂的连接
- 深度查询能力,MongoDB支持动态查询
- 容易调试
- 容易扩展
- 不需要转化/映射应用对象到数据库对象
- 使用内部内存作为存储工作区,以便更快的存取数据