MongoDB 中的数据库分片?

Database sharding in MongoDB?

目前我正在探索 Mongo 数据库中数据库分片的工作原理。

我的用例是我的 Web 应用程序中有许多产品,例如 electronics/baby prods/books/cloths 等。假设我想将不同的产品存储在不同的数据库(在不同的机器上)以分配负载并在需要时进行扩展。

我的问题是 Mongo 数据库负责根据产品类型将产品存储在正确的数据库中,而我的网络服务器 java 代码将完全不知道它? Mongo 数据库支持这个吗?

或者网络服务器 java 代码负责连接到正确的数据库进行存储 基于其类型的产品?

是的,MongoDB支持您描述的内容。 Sharding in MongoDB 是 MongoDB 允许缩放 out/horizontally 缩放的方式。它需要一个分片键,用于决定分片集合中的文档(在您的情况下是产品)将最终位于哪个分片上。听起来您想使用产品类型作为您的分片键。 MongoDB 负责根据分片键将文档定向到分片。参考链接的网页,您的 Web 服务器将连接并发送查询到 mongos 查询路由器实例,该实例将根据分片键将查询适当地路由到分片。

分片键的选择不应掉以轻心。如果选择不当,几乎所有查询最终都会转到一个分片。了解分片关键因素(如基数、频率和更改率)如何影响分片性能 here

您的 Java 应用程序连接到 mongos 并且 mongos 代表整个数据库,无论有多少 mongod你运行宁! mongos 处理与正确 mongod 服务器的连接并 运行 处理您的查询。所以基本上你的 Java 应用程序将 MongoDB 视为一个黑盒子。

P.s:您可以 运行 多个 mongos,在您的 local DNS provider 中为它们分配一个域名,它将负责您的 mongos。您的 java 应用程序行为在这种情况下也是相同的。