2014-09-25 7 views
0

Я создаю веб-проект MEAN как свое хобби. У меня есть два mongoDB, один находится в Японии, а другой - в Китае. Могу ли я настроить приложение для использования разных mongoDB на основе местоположения? Например, если пользователь получает доступ из Китая, то приложение должно иметь возможность выбрать mongoDB, расположенную в Китае. Есть какой-либо способ сделать это?Как автоматически выбрать mongodb на основе местоположения?

+0

На самом деле есть гораздо лучший ответ на этот вопрос. Но, к сожалению, это не по теме, поскольку реальный ответ не является программным решением. –

ответ

1

Это может быть достигнут с помощью tag based sharding or tag aware sharding. В основном, он работает следующим образом:

  1. У вас есть ценность в ваших документах, которые означают, что этот конкретный документ принадлежит вашему китайскому или вашему японскому набору данных, например. location: 'CHN' или location: 'JPN'
  2. Вы создали осколочный кластер, где один осколок находится в центре обработки данных в Китае, а другой находится в Японии.
  3. Вы assign tags to each shard. В вашем случае это будет иметь смысл помечать китайский осколок с CHN и японским осколком с JPN
  4. Теперь вы можете настроить осколки, что японский осколок должен содержать все документы с location: 'JPN' и китайским осколок, чтобы держать все документы держать все документы с location: CHN с присвоения этих значений к соответствующим помечено осколками:

    sh.addTagRange ("database.collcetion", {местоположение: "ЧН"}, {местоположение: "ЧН"}, "ЧН") sh.addTagRange ("database.collcetion", {location: "JPN"}, {location: "JPN"}, "JPN")

  5. Используйте местоположение в качестве ключа осколка.

  6. Теперь вы можете использовать единую базу данных, и данные будут автоматически распределены географически, а запросы вашего приложения всегда будут направляться в географически соответствующий центр обработки данных.
+0

О, ладно. На самом деле это вопрос вне темы (хорошо ответ на вопрос), но я думаю, что ущерб уже был нанесен. +1 –

+1

Мысленно подумал, что я должен ответить на него, но мой подход заключался в том, что программист задал себе вопрос с проблемой, которая на самом деле не его. Поэтому я ответил на это до такой степени, что ОП понимает, что эта проблема на самом деле не его, а его DBA. –

+0

Согласовано. Кроме того, на этот вопрос уже был дан ответ, поэтому немного PITA для его миграции. Я полагаю, что единственное значение, добавленное здесь, - это отметить, что, хотя «осколки» возможны только с двумя серверами, это не рекомендуется. Но опять же, одиночные серверы не являются действительно мудрым выбором. В противном случае достаточно ясно. Пусть логика базы данных справится с этим и оставит код в покое. –

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 
    } 
}); 
Смежные вопросы