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 应用程序行为在这种情况下也是相同的。
目前我正在探索 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 应用程序行为在这种情况下也是相同的。