猿教程 Logo

.Net连接MongoDb:索引

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买

介绍

在上一篇文章中,我们完成了对MongoDb中聚合框架的讨论。 我们现在知道在使用JavaScript和JSON使用MongoDb .NET驱动程序的mongo shell中构建汇聚管道的基础知识。 特别地,我们研究了如何使用聚合流畅API中的专用方法编写强类型聚合查询。

从这篇文章开始,我们将重点放在MongoDb中的不同主题:性能指标和相关主题。

一般言论

有可能你知道数据库中的几个索引。 全层堆栈开发人员在优化数据库表时通常无法避免它们。 MongoDb还提供与关系数据库完全相同的索引。 他们提供了一种通过在文档上保持排序的注册表的方式来更快地进行搜索的方法。 排序非常重要,因为它与非排序的文档集相比能够快速而有效地进行搜索。 如果要查询一个包含百万个文档和索引的集合,那么搜索引擎将需要查看该集合中的每个文档。 然而,如果在集合之前有一个索引,那么搜索引擎可以通过查询索引,即首先排序的注册表快速找到相关的文档。

您构建的索引类型将取决于几个参数:

  • 查询:您作为开发人员(或至少应该)对从应用程序中触发数据库的查询类型有一个好主意。 如果在特定字段上有很多搜索,如“名称”,那么在该字段上设置索引可能是个好主意。 复合索引,即包含多个密钥的索引可以处理覆盖多于一个字段的查询,例如在“名称”,“年龄”和“爱好”字段上的搜索

  • 阅读与写作:索引不免费。 在MongoDb索引中,是数据库中每个新记录更新的文档。 如果您在“名称”字段上构建索引,则必须使用每个新文档更新名称索引,否则它们不会显示在搜索结果中。 名称索引将根据索引的指定方式将名称保持升序或降序。 这种排序将使搜索非常有效。 那么如果有一个新的文件,一个新的名称,那么这个名字必须被挤压到名称索引。 这意味着与没有索引的情况相比,写入操作更慢。 但是,读取速度会更快。 在盲目开始在每个单个字段上创建索引之前,您需要考虑读取和写入的频率。 后一种策略从来不是一个好主意。

  • 索引大小:由于索引也是文档,它们将随着新文档的数量而不断增长

  • 单键和多键索引:如上所述,可以构建组合索引。 如果经常搜索名称和年龄字段,那么创建“name”和“age”的组合索引可能是个好主意。 这种索引也将有助于搜索名称字段。 但是,如果仅在年龄字段上进行搜索,则多键索引将无法使用,因为主排序键是名称。 在这种情况下,年龄只是辅助排序键,基于年龄的查询将需要通过所有文档

MongoDb收集统计

在我们实际创建索引之前,我简单地想提一个可以在Mongo shell中的一个集合上调用的实用程序函数:stats()。 回想一下,我们在本教程中一直在使用2个演示集:邮政编码和餐馆。 如果您想提取一些关于集合的基本统计信息,那么您可以在Mongo shell中编写一些类似的内容:

db.zipcodes.stats()

它将返回一个大的JSON文档,其中大部分输出实际上与数据库的存储引擎相关。 存储引擎“是数据库的组件,负责管理如何在内存和磁盘上存储数据。 MongoDB支持多种存储引擎,因为不同的引擎对特定工作负载的表现会更好。“ 换句话说,这是数据库的灵魂。 MongoDb提供了可插拔的接口,其中可以以与我们可以具有某些C#接口的多个实现相同的方式替换存储引擎实现。 如果您有时间和知识,发现不满意查询性能,那么您可以开发自己的MongoDb存储引擎。 我想这里没有太多的人。

从版本3.2.4起,标准安装包附带的默认存储引擎称为WiredTiger。 在stats输出中会看到一个名为“wiredTiger”的子文档,其中包含大量的元数据。 我认为,大多数开发人员不需要知道存储引擎的细节是安全的,但是很高兴知道它存在,以及在哪里可以找到有关它的信息。 说实话,我真的不知道“LSM”和“block-manager”是什么意思,我从来没有需要深入挖掘。 DBA可能想要了解更多。

JSON文档中的其他属性对我们来说可能更有趣:

  • “ns”:集合命名空间,“model.zipcodes”,用于演示邮政编码集合的情况,其中“model”是数据库名称

  • “count”:集合中的文档数量

  • “size”:为字符集保留的总空间

  • “avgObjSize”:平均文档大小,它是总大小除以文档数量

  • “上限”:上限集合“是固定大小的集合。 ...覆盖的集合以类似于循环缓冲区的方式工作:一旦集合填充其分配的空间,它将通过覆盖集合中最旧的文档来为新文档腾出空间。“默认情况下,集合不被限制,必须明确设置 createCollection函数如这里所述。

统计的最后一节显示了与索引相关的许多属性:

  • “nIndexes”:索引数,当前为1.默认情况下,_id字段上始终有一个索引

  • “totalIndexSize”:数据库中所有索引的总大小

  • “indexSizes”:此子文档显示每个索引的大小。 目前,_id字段中只有一个索引

在下一篇文章中,我们将开始研究Mongo shell中的索引创建。

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效: 去购买


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/CsharpMongo/30.html