0

我在用

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

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

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

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

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

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

有人知道可能出了什么问题吗?我正在使用 Mongo 2.2.3。

4

1 回答 1

1

找到了原因。

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

MongoDbSessionHandler.php我们正在使用这样的工具write

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

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

解决方案是简单地使用MongoDbSessionHandler.phpgithub 中的最新版本。

于 2013-04-01T20:21:32.517 回答