2016-12-05 34 views
1

目前我正在探索Sharding是如何在Mongo DB中工作的。数据库在MongoDB中分片?

我的使用案例是我的网络应用程序中有许多产品,如电子产品/婴儿刺绣品/书籍/衣服等。假设我想在不同的数据库上存储不同的产品(在不同的机器上)以分配负载并在需要时扩展。

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

或者它将是连接到正确的数据库以存储 基于它的类型的产品的Web服务器Java代码的责任?

回答

0

是的,MongoDB支持你描述的内容。 Sharding in MongoDB是MongoDB如何允许缩放/水平缩放。它需要一个分片密钥,它用于决定分片集合中的文档(您的案例中的产品)将以哪个分片结束。这听起来像你想使用产品类型作为分片键。 MongoDB负责根据分片键将文档导向分片。通过参考链接的网页,您的Web服务器将连接并向mongos查询路由器实例发送查询,这将根据分片键将查询恰当地路由到分片。

尽管如此,选择分片键不应该被忽略。如果选择得不好,几乎所有的查询都可能会导致一个碎片。了解分片关键因素(如基数,频率和变化率)如何影响分片性能here

1

你的Java应用程序连接到mongosmongos代表整个DB不管有多少mongod你跑! mongos处理与正确的mongod服务器的连接并运行您的查询。所以基本上你的Java应用程序将MongoDB视为一个黑盒子。

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