0

私は使っている

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

PHP アプリのセッション ハンドラーとして。

私たちのアプリは大量のトラフィックが予想されるため、Mongo ストア セッションのシャーディングを実験しています。

ドキュメントに従ってシャードをセットアップしましたが、コレクションをシャードする前はすべて問題ありません (コレクション内にセッション ドキュメントが作成されていることがわかりますsession)。

sessionsharding key を使用してシャーディングを有効にするとすぐにsess_id、セッション ドキュメントが作成されなくなり (つまり、カウントは変更されません)、mongosPHP ページにアクセスするたびにログ に次の行が表示されます。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.php解決策は、githubの最新バージョンを使用することです。

于 2013-04-01T20:21:32.517 に答える