我正在使用
作为我的PHP应用程序的会话处理程序。
我们的应用程序期望大量流量,因此我们正在尝试对存储会话的Mongo进行分片。
我根据文档设置了我的分片,在我对分类进行分片之前一切都很好(我可以看到在session
集合中创建了会话文档)。
只要使用分片键session
在sess_id
上启用分片,就不会创建会话文档(即计数永不改变),我在mongos
日志中看到这些行每当我访问我的PHP页面时:
resetting shard version of mydb.session on my.hsard.ip.address:port, version is zero
我试图对我的其他集合进行分片,但它工作正常,因此告诉我我的分片设置是正确的。
任何人都有可能出错的线索?我正在使用Mongo 2.2.3。
答案 0 :(得分:1)
找到原因。
这是因为我们使用的symfony版本附带的write
中的MongoDbSessionHandler.php
函数不适用于分片。
MongoDbSessionHandler.php
我们正在使用这样的实现write
:
$mongo->update({shardkey:1}, {shardkey:1, data:2}, {upsert:true})
这是不允许的,因为您无法更改分片键。
解决方案是在github中使用最新版本的MongoDbSessionHandler.php
。