目前,我正在探讨如何在Mongo中进行数据库分块。
我的用例是,我的web应用程序中有许多产品,如电子产品/婴儿用品/书籍/衣服等。假设我想将不同的产品存储在不同的DB上(在不同的机器上),以便在需要的情况下分配负载并进行扩展。
我的问题是Mongo有责任根据产品类型将产品存储在正确的DB中,而我的webserver java代码会完全不知道这一点吗?Mongo支持这一点吗?
还是由webserver java代码根据产品类型连接到正确的DB来存储产品呢?
发布于 2016-12-05 05:05:20
是的,MongoDB支持您描述的内容。MongoDB中的切分是MongoDB允许扩展/水平缩放的方式。它需要一个切分键,它是用来决定切分集合中的文档碎片(在您的情况下是产品)将被分割到哪个文档碎片上的。听起来你想用产品类型作为你的切分键。MongoDB负责根据碎片键将文档定向到碎片。参考链接的网页,您的web服务器将连接并发送查询到mongos查询路由器实例,这些实例将根据碎片键将查询适当地路由到碎片。
但切分键的选择不应掉以轻心。如果选择得不好,几乎所有的查询最终都会变成一个碎片。了解碎片的关键因素(如基数、频率和变化率)如何影响碎片性能这里。
发布于 2016-12-05 05:27:45
您的Java应用程序连接到mongos
,不管运行多少mongod
,mongos
都代表整个DB!mongos
处理到正确mongod
服务器的连接并运行查询。因此,基本上,您的Java应用程序将MongoDB看作一个单独的黑匣子。
P.s:您可以运行多个mongos
,在您的local DNS provider
中为它们分配一个域名,它将负责mongos
的负载平衡。在这个场景中,java应用程序的行为也是一样的。
https://stackoverflow.com/questions/40967206
复制相似问题