如何根据位置自动选择mongodb?

时间:2014-09-25 09:49:57

标签: node.js mongodb synchronization replication mean-stack

我正在创建一个MEAN网络项目作为我的爱好。我有两个mongoDB,一个在日本,另一个在中国。我可以将我的应用程序配置为根据位置使用不同的mongoDB吗?例如,如果用户从中国访问,那么应用程序应该能够选择位于中国的mongoDB。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

这可以使用tag based sharding or tag aware sharding来实现。基本上,它的工作原理如下:

  1. 您的文档中有一个值,表示此特定文档属于您的中文或日文数据集,例如。 location: 'CHN'location: 'JPN'
  2. 您设置了一个分片群集,其中一个分片位于中国的数据中心,另一个分片位于日本。
  3. assign tags to each shard。在您的情况下,使用CHN标记中文分片并使用JPN
  4. 标记日语分片是有意义的
  5. 现在,您可以配置日本分片应该包含location: 'JPN'所有文档的分片和中文分片,以保存所有文档以保存location: CHN的所有文档,并将这些分配给相应标记的分片:

    sh.addTagRange(“database.collcetion”,{location:“CHN”},{location:“CHN”},“CHN”)   sh.addTagRange(“database.collcetion”,{location:“JPN”},{location:“JPN”},“JPN”)

  6. 使用location作为分片键。

  7. 现在,您可以使用单个数据库,数据将自动按地理位置分布,并且应用程序的查询将始终路由到地理位置匹配的数据中心。

答案 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
    }
});