PHP Mongo会话处理程序和分片

时间:2013-04-01 12:19:54

标签: php mongodb session

我正在使用

https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/MongoDbSessionHandler.php

作为我的PHP应用程序的会话处理程序。

我们的应用程序期望大量流量,因此我们正在尝试对存储会话的Mongo进行分片。

我根据文档设置了我的分片,在我对分类进行分片之前一切都很好(我可以看到在session集合中创建了会话文档)。

只要使用分片键sessionsess_id上启用分片,就不会创建会话文档(即计数永不改变),我在mongos日志中看到这些行每当我访问我的PHP页面时: resetting shard version of mydb.session on my.hsard.ip.address:port, version is zero

我试图对我的其他集合进行分片,但它工作正常,因此告诉我我的分片设置是正确的。

任何人都有可能出错的线索?我正在使用Mongo 2.2.3。

1 个答案:

答案 0 :(得分:1)

找到原因。

这是因为我们使用的symfony版本附带的write中的MongoDbSessionHandler.php函数不适用于分片。

MongoDbSessionHandler.php我们正在使用这样的实现write

$mongo->update({shardkey:1}, {shardkey:1, data:2}, {upsert:true})

这是不允许的,因为您无法更改分片键。

解决方案是在github中使用最新版本的MongoDbSessionHandler.php