Мой код выглядит так:Странная вещь о MongoDB-Эрл водителя при использовании набора реплик
Replset = {<<"rs1">>, [{localhost, 27017}, {localhost, 27018}, {localhost, 27019}]},
Conn_Pool = resource_pool:new (mongo:rs_connect_factory(Replset), 10),
...
Conn = resource_pool:get(Conn_Pool)
case mongo:do(safe, master, Conn, ?DATABASE,
fun() ->
mongo:insert(mytable, {'_id', 26, d, 11})
end end)
...
27017
является основным узлом, поэтому OFC я могу вставить данные успешно.
Но, когда я помещаю только один вторичный узел в код вместо всех экземпляров mongo rs: Replset = {<<"rs1">>, [{localhost, 27019}]}
, я также могу вставить данные.
Я думал, что это должно было вызвать исключение или ошибку, но оно записало данные успешно.
Почему это произошло?
Так будет ли соединение создаваться между сервером erlang до {localhost, 27019} или {localhost, 27017}, когда я записываю данные в db? Я имею в виду, что данные сначала отправятся «27019», а затем экземпляр mongo передаст данные в «27017» (потому что я ставлю 27019 как единственное семя); или сервер erlang получит информацию о конфигурации наборов реплик mongo, затем найдите основной узел и постройте соединение с 27017, а затем напишите данные непосредственно на 27017? –
соединение создается драйвером для каждого не скрытого члена набора реплик. Писания всегда будут идти в зависимости от того, какой из них является первичным. Таким образом, последний, но он не только строит соединение с первичным, он поддерживает соединения со всеми членами реплики, поэтому он может выполнять надлежащий переход на другой ресурс, если первичный файл исчезает. –