我正在创建一个MEAN网络项目作为我的爱好。我有两个mongoDB,一个在日本,另一个在中国。我可以将我的应用程序配置为根据位置使用不同的mongoDB吗?例如,如果用户从中国访问,那么应用程序应该能够选择位于中国的mongoDB。有没有办法做到这一点?
答案 0 :(得分:1)
这可以使用tag based sharding or tag aware sharding来实现。基本上,它的工作原理如下:
location: 'CHN'
或location: 'JPN'
CHN
标记中文分片并使用JPN
现在,您可以配置日本分片应该包含location: 'JPN'
所有文档的分片和中文分片,以保存所有文档以保存location: CHN
的所有文档,并将这些分配给相应标记的分片:
sh.addTagRange(“database.collcetion”,{location:“CHN”},{location:“CHN”},“CHN”) sh.addTagRange(“database.collcetion”,{location:“JPN”},{location:“JPN”},“JPN”)
使用location作为分片键。
答案 1 :(得分:0)
您是否可以将代码的一部分发布到MongoDB,因为您应该打开两个连接。
打开两个连接,一个是MongoChina,另一个是MongoJapan。
当用户连接时,获取他的IP地址,并根据此选择连接使用的位置。
伪代码:
var MongoChina = //Connecting to the chinese mongo server,
MongoJapan = //Connecting to the japanese mongo server;
function isJapanese(ip) {
//Return true if IP is in japanese ip range
//http://www.nirsoft.net/countryip/jp.html
}
function isChinese(ip) {
//Return true if IP is in chinese ip range
//http://www.nirsoft.net/countryip/cn.html
}
on.('user_connecting', function (req, res) {
var ip = //Extract the user ip from the request;
if (isJapanese(ip)) {
getDataToSendToMongo(function (data) {
MongoJapan.send(data);
});
} else if (isChinese(ip)) {
getDataToSendToMongo(function (data) {
MongoChina.send(data);
});
} else {
//Do whatever you like
}
});