zoukankan      html  css  js  c++  java
  • mongodb的读写分离

    mongodb的读写分离使用Replica Sets来实现

    对于replica set 中的secondary 节点默认是不可读的。在写多读少的应用中,使用Replica Sets来实现读写分离。通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作。

    如果通过shell访问mongo,要在secondary进行查询。会出现如下错误:
    imageSet:SECONDARY> db.fs.files.find()
    error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
    有两种方法实现从机的查询:
    第一种方法:db.getMongo().setSlaveOk();
    第二种方法:rs.slaveOk();
    但是这种方式有一个缺点就是,下次再通过mongo进入实例的时候,查询仍然会报错,为此可以通过下列方式
    vi ~/.mongorc.js
    增加一行rs.slaveOk();
    这样的话以后每次通过mongo命令进入都可以查询了


    如果是通过java访问secondary的话则会报下面的异常
    com.mongodb.MongoException: not talking to master and retries used up
    解决的办法很多。
    第一种方法:在java代码中调用dbFactory.getDb().slaveOk();
    第二种方法:在java代码中调用
    dbFactory.getDb().setReadPreference(ReadPreference.secondaryPreferred());//在复制集中优先读secondary,如果secondary访问不了的时候就从master中读

    dbFactory.getDb().setReadPreference(ReadPreference.secondary());//只从secondary中读,如果secondary访问不了的时候就不能进行查询
    第三种方法:在配置mongo的时候增加slave-ok="true"也支持直接从secondary中读
    <mongo:mongo id="mongo" host="${mongodb.host}" port="${mongodb.port}">
    <mongo:options slave-ok="true"/>
    </mongo:mongo>

  • 相关阅读:
    数学+高精度 ZOJ 2313 Chinese Girls' Amusement
    最短路(Bellman_Ford) POJ 1860 Currency Exchange
    贪心 Gym 100502E Opening Ceremony
    概率 Gym 100502D Dice Game
    判断 Gym 100502K Train Passengers
    BFS POJ 3278 Catch That Cow
    DFS POJ 2362 Square
    DFS ZOJ 1002/HDOJ 1045 Fire Net
    组合数学(全排列)+DFS CSU 1563 Lexicography
    stack UVA 442 Matrix Chain Multiplication
  • 原文地址:https://www.cnblogs.com/l10n/p/10311471.html
Copyright © 2011-2022 走看看