2013-04-01 5 views
0

J'utilisePHP session Mongo Handler et Sharding

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

comme mon gestionnaire de session pour mon application PHP. Notre application s'attend à un volume de trafic élevé, donc nous expérimentons avec sharding la session de magasinage de Mongo.

J'ai configuré ma partition en fonction du document, et les choses se passent bien avant de partitionner la collection (je peux voir le document de session en cours de création dans la collection session).

Dès que j'ENABLED sharding sur session en utilisant sharding clé sess_id, alors aucun document de la session est créé (ie ne comptent jamais changer), et je vois ces lignes dans le mongos journal chaque fois que je visite ma page PHP: resetting shard version of mydb.session on my.hsard.ip.address:port, version is zero

J'ai essayé de partitionner mon autre collection et ça marche très bien, donc ça me dit que ma configuration de sharding est correcte.

Quelqu'un at-il une idée de ce qui pourrait être faux? J'utilise Mongo 2.2.3.

Répondre

1

Trouvé la cause.

C'est parce que la fonction de MongoDbSessionHandler.php fournie avec la version de symfony que nous utilisons ne fonctionnera pas avec sharding.

Le MongoDbSessionHandler.php nous utilisons des outils write comme ceci:

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

ce qui est interdit, parce que vous ne pouvez pas modifier la clé de tesson.

La solution consiste simplement à utiliser la dernière version de MongoDbSessionHandler.php dans le github.