コードは大まかに次のようになります:
コードをコピー コードは次のとおりです:
functiongenerate_auto_increment_id($namespace, array $option = array())
{
$option += array(
' init' => 1,
'step' => 1,
);
$instance = new Mongo();
$instance = $instance->selectCollection('_seq', 'seq') );
$ seq = $instance->db->command(array(
'findAndModify' => 'seq',
'query' => array('_id' => $namespace),
'update' = > array('$inc' => array('id' => $option['step'])),
'new' => true,
)); ($seq[ 'value']['id'])) {
return $seq['value']['id']
}
$instance->insert(array(
'_id' => $namespace,
'id' => $option['init'],
));
var_dump(generate_auto_increment_id('foo')); 'bar', array('init' => 123)));
具体的な実装方法は、主にMongoDBのfindAndModifyコマンドを使用してIDを生成し、_idに割り当てます。 MongoDB にオブジェクトを挿入するたびに、その実装はアトミック性を満たしているため、同時実行性の問題は発生しません。
さらに、findAndModify 自体が upsert パラメーターを提供します。これが true の場合、自動的に挿入できますが、初期値をカスタマイズできないため、記事内の例では upsert を使用しません。
上記は、monde の内容を含め、MongoDB で Auto Increment をシミュレートするための monde の PHP コードを紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。