Zan*_*aes 3 mongoose mongodb node.js
我正在使用Node.js + Express + Mongoose连接到我的MongoDB副本集(3x实例).我的印象是,当我使用Mongoose的"connectSet"命令,从而连接到副本集时,我的查询将在我的副本集之间进行负载平衡.
但是,使用nodetime,我可以看到所有查询(包括find()查询)都将转到副本集中的PRIMARY实例.
我在这里误解了什么吗?是否有一些我缺少的练习,或副本集中的设置?我认为副本集的目的是平衡只读查询与集合中的SECONDARY MongoDB服务器...
谢谢.
我的印象是,当我使用Mongoose的"connectSet"命令,从而连接到副本集时,我的查询将在我的副本集之间进行负载平衡.
这种印象不正确.
默认情况下,MongoDB读取和写入将发送到副本集的主成员.副本集的主要目的是提供高可用性(HA).当主节点发生故障时,驱动程序将在现有连接上抛出异常,然后自动重新连接到选择新主节点的任何节点.
这里的想法是驱动程序将找到新的主数据库,没有干预,也没有配置更改.
是否有一些我缺少的练习,或副本集中的设置?
如果您确实要向辅助节点发送查询,则可以在查询上配置一个标志,指出"此查询可以发送到辅助节点".这个的实现会有所不同,这是 Mongoose 的一个版本.
请注意,向辅助节点发送查询不是默认行为,这里存在许多缺陷.MongoDB的大多数实现都受到单个写锁定的限制,因此不需要对读取进行负载平衡.传播读取并不能保证提高性能,并且很容易导致脏读.
在进行这样的负载平衡之前,请确保您绝对需要它.分片可能是更好的选择.
| 归档时间: |
|
| 查看次数: |
1567 次 |
| 最近记录: |