如何在 Mongoose 中使用 Sharding

· 约 4 分钟读完

Mongoose 是一个 Node.js 下的 MongoDB 驱动程序,对于开发者来说是非常方便的数据库操作工具。在大规模的系统中,为了处理海量数据,使用 Mongoose 的 Sharding 功能可以帮助我们更轻松地扩展数据库。

什么是 Sharding?

Sharding 是一种横向扩展数据库的解决方案,它将数据分成多个分片(Shard),每个分片都是独立的,存储一部分数据。这样可以扩展数据库的存储能力和读写能力,同时也可以提高数据库的可用性。

Mongoose 中的 Sharding

前面我们说过,Mongoose 是一个 MongoDB 驱动程序,它支持使用 MongoDB 的 Sharding 功能来扩展数据库。在 Mongoose 中启用 Sharding 需要配置 Mongoose 连接的选项。

配置 Sharding

可以通过 Mongoose 的 createConnection 方法来启用 Sharding:

以上配置中,shardStrategy 是一个函数,用于根据 Collection 名称决定哪个 Shard 需要存储该 Collection。在此示例中,我们将其设置为随机挑选一个 Shard。

分片键

在使用 Sharding 时,需要指定一个分片键(Shard Key)。分片键是区分数据所属 Shard 的依据,每个文档都会被映射到一个 Shard 上,这里的映射是通过分片键的哈希值来实现的。

下面是示例代码:

以上示例代码将一个新的 Collection 成为了可分片的集合,MongoDB 内容鉴别器将此作为自动分片的信号。当 Mongoose 把数据插入到 Collection 时,基于确认的分片键(start)哈希值,会把数据插入到特定 Shard。

Sharding 的自动重平衡

实际环境中,如果利用 Sharding 分叉数据库集合,数据数量肯定不会均匀地分布在每个 Shard 上。在某些情况下,这将导致某些 Shard 上负担太重,而其他 Shard 上没有负载。这时就需要自动重平衡。

Mongoose 中支持自动重平衡。默认情况下,它会检测到数据的不平衡,然后把它们移动到一个新的 Shard 上。其内部循环每 5 秒检查一次,是否应该运行自动平衡。

要手动运行自动平衡,可以调用 shardsAutoBalancing,如下所示:

在上面的代码中,UserModel 是一个使用分片键为 start 的分片集合。

小结

Sharding 是一种用于横向扩展数据库的解决方案。在 Mongoose 中启用 Sharding 需要配置 Mongoose 连接的选项。分片键是区分数据所属 Shard 的依据,每个文档都会被映射到一个 Shard 上。使用 Mongoose 的 Sharding 功能可以帮助我们更轻松地扩展数据库,同时也可以提高数据库的可用性。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d64e3aa941bf7134c02d0c