嵌入相关数据:通常,相关数据可以嵌入到单个文档中,从而减少查询时进行高成本连接的需求。例如,顾客文档可能会嵌入他们的地址(作为子文档数组)和付款方式(另一个数组),允许单次读取操作检索所有相关的客户信息。这显著提升了频繁访问、紧密耦合数据的读取性能,因为它消除了关系数据库固有的多次网络往返和复杂的连接操作。例如:
在这个例子中,客户的地址和订单嵌入在客户文档中,使得通过单个查询检索客户的完整资料变得非常高效。
MongoDB 拥有强大且富有表现力的查询语言,支持灵活的数据检索和操作。虽然它并非 SQL,但它直观易用且支持各种操作,即使是熟悉 JavaScript 和
聚合框架:这是一个非常出色的功能,它提供了强大的多阶段数据处理管道。它允许用户直接在数据库中执行复杂的数据转换、过滤、分组、排序和分析操作。例如$匹配,$group,$项目,$sort,$限制, 和 $放松实现与许多 SQL 数据库聚合功能相媲美甚至超越的复杂数据分析。这减少了许多分析任务将数据提取到外部处理层的需要,从而大大简化了分析和报告的数据管道。
$匹配:过滤文档。
$group:按指定字段对文档进行分组并执行聚合函数(例如,和,平均,数数)。
$项目:重塑文档,包括添加、删除或重命名字段。该聚合管道有效地处理订单集合,分组客户ID,总结总金额对于每个客户,计算他们的订单,然后对结果进行排序。
3. 通过分片实现水平扩展
MongoDB 的设计目标是水平可扩展性这意味着它可以将数据分布到多个服务器(分片)上,以处理海量数据集并实现高吞吐量。对于需要扩展到互联网规模的应用程序来说,这是一个关键特性。
分片:将数据分布到多台机器的过程。MongoDB 的分片架构允许你通过向集群添加更多机器来扩展数据库。每个分片都是一个副本集(用于实现高可用性),并且蒙戈斯路由器将查询定向到适当的分片。分片使数据库能够处理更多并发操作,并存储比单个服务器所能处理的更多的数据。
分片键:为了分发数据,您需要定义一个分 危地马拉电话营销数据 片键用于集合。MongoDB 使用此键来确定文档属于哪个分片。选择有效的分片键对于均衡的数据分布和高效的查询路由至关重要,因为选择不当的分片键可能会导致“热点”(某些分片上的数据分布或查询负载不均匀)。
基于范围的分片:根据分片键值的范围分布数据。适用于分片键范围查询,但如果数据集中在特定范围内,则可能导致分布不均匀。
基于哈希的分片:根据分片键值的哈希值来分布数据,从而促进点查询在各分片之间的更均匀分布。但是,基于哈希分片键的范围查询效率会降低,因为顺序会丢失。
复合分片键:将多个字段组合为一个分片键可以对数据分布和查询路由提供细粒度的控制。
自动平衡:MongoDB 包含一个自动平衡器,它可以自动在分片之间迁移数据块(分片键值的范围),以保持数据和查询负载的均匀分布,从而确保任何单个分片都不会成为热点。这一自动化过程显著降低了管理大型分布式数据库的运营开销。
路由器(mongos):客户端应用程序连接到蒙戈斯实例,充当查询路由器。蒙戈斯了解分片集群拓扑并将客户端操作定向到适当的分片,从应用程序中抽象出分布式系统的复杂性。