ホームページ >php教程 >php手册 >MongoDB の自動インクリメントをシミュレートする PHP コード

MongoDB の自動インクリメントをシミュレートする PHP コード

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-21 08:55:171008ブラウズ

代幣大致如下示:

复制代 代幣大致如下:


functiongenerate_auto_increment_id($namespace, array $option = array())
{
$option += array(
'init' => 1,
'ステップ' => 1,
);
$instance = new Mongo();
$instance = $instance->selectCollection('_seq', 'seq');
$seq = $instance->db->command(array(
'findAndModify' => 'seq',
'query' => array('_id' => $名前空間)、
'update' => array('$inc' => array('id' => $option['step']))、
'new' =>
));
if (isset($seq['value']['id'])) {
return $seq['value']['id'];
}
$instance->insert(array(
'_id' => $namespace,
'id' => $option['init'],
)) ;
return $option['init'];
}
var_dump(generate_auto_increment_id('foo'));
var_dump(generate_auto_increment_id('bar', array('init' => 123)));
?>


その具体的な実装方法は、主に MongoDB 内の findAndModify コマンドを使用することであり、毎回 MongoDB にオブジェクトを挿入する前に ID 値 unt_id が OK になるだけで、十分な原子性が実現されているため問題は発生しません。 >

さらに、findAndModify 自体に upsert パラメータが用意されており、true の場合は自動的に挿入できますが、初期値を自動的に定義することはできないため、この例では upsert を使用していません。

ところで、データベース「_seq」の名前が行頭の下にあるため、このようなリストの時間が前に来ると、より簡単に分割できます。

参考:MongoDB による自動インクリメント



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。