所以我喜欢使用单独的db来处理写入(可能会说2个写入db,然后每个可以有3个副本用于读取).
$mongo = new Mongo("mongodb://localhost:27017",array('connect'=>true,'timeout'=>2000, 'persist'=>'test_mongodb_con','replicaSet'=>true));
Run Code Online (Sandbox Code Playgroud)
并测试......
$user = array('email'=>'test@test.com','firstname'=>'test','lastname'=>'user','twitter'=>'@test','time'=>date('m:i:s'));
$mongo->test->testuser->insert($user);
$cursor = $mongo->test->testuser->find()->slaveOkay(true);
Run Code Online (Sandbox Code Playgroud)
但当slaveOkay为真时唯一的区别是标志键的值为4 - 但它并没有告诉我它实际使用的是哪个数据库.因为mongod知道所有复制品,所以我将它们放在不同的端口上是否重要?
我已经搜索了这个主题几个小时,找不到任何完全回答我问题的内容.我已经阅读了php文档,mongo文档等...仍然感到困惑.
MongoDB中的复制和分片之间存在差异.
如果您正在使用复制,则只有一个节点正在接收写入 - 主节点.您的驱动程序连接到副本集,并且所有写入都将转到单个主节点,无论它当时恰好是哪个节点.
如果要使用MongoDB在多个节点之间分发写入,则必须设置分片.通过分片,您的驱动程序将连接到路由器进程('mongos'),该进程将自动将写入路由到群集中的正确节点.
复制用于持久性,故障转移,备份和(偶尔)读取扩展.
默认情况下,所有读取也都会转到主节点.'slaveOK'标志(已被弃用以支持Read Preference)允许读取进入辅助节点.这允许查询负载从主节点分发,代价是可能读取陈旧数据.
如果没有SlaveOK标志,您可以保证回读刚才写的数据(除非其他人自那时起对其进行了修改).使用SlaveOK标志,没有这样的保证:次要可能是主要的秒,分钟甚至数小时.
如果要使用MongoDB进行写入缩放,则需要设置分片.
归档时间: |
|
查看次数: |
496 次 |
最近记录: |