Mongodb知识点
MongoDB是什么?
由C++语言编写的,是一个基于分布式文件存储的开源数据库系统**,在高负载的情况下,添加更多的节点,可以保证服务器性能,**旨在给web应用提供可扩展的高性能数据存储解决方案。
MongoDB有哪些特点?
没有数据表!只有集合
①面向文档存储的数据库
②设置任何属性来实现更快的排序
③通过本地或者网络创建数据镜像,更强的扩展性
④如果负载增加(需要更多的存储空间和更强的处理能力),可以分布在计算机网络中的其他节点上就是所谓的分片
⑤支持丰富的查询表达式,查询指令使用JSON形式标记,轻易查询文档中内嵌对象及数组
⑥允许在服务端执行脚本,可以用javascript编写某个函数,直接在服务端执行,也可以把函数定义存储在服务端,下次直接调用即可
id | name | age |
---|---|---|
1 | 2 | 3 |
2 | ||
3 |
集合中俩文档结构不一样ok的(无顺序)
查询效率低 自带索引
node.js
什么是MongoDB中的“命名空间”?
在集合中存储BSON(B指的是二进制)(二进制交换和结构对象表示法)对象。集合名称和数据库名称的串联成为名称空间。
admin、test、user
最顶层mongodb软件 内部可划分成多个数据库
TS typeScript 使用C#开发的,用来限制类型 具有同类特征的一块数据
js弱类型语言 没有明确的定义方式
MongoDB中的分片是什么?
在多台计算机上存储数据记录的过程称为分片。可以满足数据增长需求,这是数据库或搜索引擎中数据的水平分区。每个分区成为分片或数据库分片。
(比如开发一个项目,在阿里云租一台香港服务器,操作系统选择win8/8.1(2012),可以访问任意国家网站。)
解释什么是副本集?
27017(默认端口号)
一组托管相同数据集的mongo实例。在副本集中,一个节点是主节点,另一个节点是副节点。从主节点到副节点,所有数据都会复制。
主节点的功能是将多个从节点的数据进行同步,写入数据,所有服务由副节点提供
复制在MongoDB中如何工作?
在多台服务器之间,同步数据的过程称为复制,通过不同数据库服务器上的多个数据库副本提供冗余并提高数据库可用性,复制有助于防止数据库丢失单个服务器。
和redis的持久化存储类似 AOF 记录过程 而不是结果
解释一下MongoDB中的索引是什么?★
mongodb内部自带索引
如果取消掉索引,增加查询时间
索引是mongodb中的特殊结构,它以易于遍历的形式存储一小部分数据集。索引按索引中指定的字段的值排序,存储特定字段或一组字段的值。
及时没有规定按什么值索引,会自动以id(自动添加)
存储结构是什么?
文档(最基本的单元 由BSON键值对key-value组成 类似于关系型数据库中的行ROW)、集合(无序 类似于关系型数据库中的表table 但由id维护的索引顺序)、数据库(一个数据库可包含多个集合 可在mongodb中创建多个数据库 类似于关系型数据库中的数据库database)
说说事务的ACID特性。★
原子性:十五是最小的执行单位
一致性:
隔离性:
持久性:
MongoDB支持哪些类型的索引?★
单字段(单键)索引
复合(组合/联合)索引(优先级高于多键)
多键索引
哈希索引
唯一索引
TTL索引
MongoDB支持主键外键关系吗?
不支持。用MongoDB本身的API需要硬编码才能实现外键关联,不够直观且难度较大。
MongoDB和Redis数据库有什么区别?
Redis比MongoDB快
Redis具有键值存储,而MongoDB具有文档类型(JSON)存储
Redis很难编码(存储编码),但MongoDB很容易
什么是聚合?
在数据库领域,聚合(Aggregation)是指对数据集合进行计算、组合和转换以生成结果的过程。聚合通常涉及将多个数据行合并为单个结果,这个结果可以是计数、求和、平均值、最大值、最小值等统计量,也可以是对数据进行分组、排序、过滤等操作后的结果。
聚合操作通常用于对大量数据进行汇总和分析,以便从中提取有用的信息。在数据库中,常见的聚合操作包括:
- 计数(Count):统计数据集合中符合特定条件的记录数量。
- 求和(Sum):对数据集合中的某个字段进行求和操作。
- 平均值(Average):计算数据集合中某个字段的平均值。
- 最大值(Max)和最小值(Min):找出数据集合中某个字段的最大值和最小值。
- 分组(Group By):根据某个字段将数据集合分成多个组,并对每个组内的数据进行聚合操作。
- 排序(Sort):根据指定字段对数据集合进行排序操作。
聚合操作通常在查询语句中以聚合函数的形式出现,如COUNT、SUM、AVG等。这些聚合函数可以用于对数据集合进行统计分析,从而得出有关数据的各种指标和结论。聚合功能是数据库系统中非常重要的一部分,它可以帮助用户快速、有效地从大量数据中提取有用的信息,并支持决策和业务需求的实现。
如何避免单点故障?
副本集由一组MongoDB实例组成,包括一个主节点多个此节点,MongoDB客户端的所有数据都写入主节点,副节点从主节点同步写入数据,以保持所有复制集内存储相同的数据,提高数据可用性。
在MongoDB中如何排序?
sort() 1升序 -1降序
db.connectionName.find{key:value})sort({columnName:1})
如何优化MongoDB查询性能?
创建索引
避免全表扫描
使用合适的数据类型
分页查询
合理使用投影
使用合适的数据类型 explain()监控和调优
char与varchar区别
char定长
varchar不定长
什么是覆盖索引?为什么它对性能有影响?
覆盖索引是指索引本身包含了查询所需的所有字段,而不需要通过回表(即查询主键)来获取额外的数据。当一个查询可以仅通过索引就能满足所有需要的字段时,就称之为覆盖索引。
①减少IO操作
②减少网络传输
③减少数据访问次数
④减少 CPU 消耗
数据在什么时候才会扩展到多个分片里?★
MongoDB是基于区域的。所以一个集合中所有的对象都被存放到一个块中。只有当存在多余一个块时,才会有多个分片获取数据的选项。现在,每个默认块的大小是64Mb,所以你需要至少64Mb空间才可以实时一个迁移。