天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP操作MongoDB時(shí)的整數(shù)問題及對(duì)策說明

MongoDB本身有兩種整數(shù)類型,分別是:32位整數(shù)和64位整數(shù),但舊版的php驅(qū)動(dòng)不管操作系統(tǒng)是32位還是64位,把所有整數(shù)都當(dāng)做32位整數(shù)處理,結(jié)果導(dǎo)致64位整數(shù)被截?cái)唷榱嗽诒M可能保持兼容性的前提下解決這個(gè)問題,新版php驅(qū)動(dòng)加入了mongo.native-long選項(xiàng),以期在64位操作系統(tǒng)中把整數(shù)都當(dāng)做64位來處理,有興趣的可參考:64-bit integers in MongoDB。

那么php驅(qū)動(dòng)真的完全解決了整數(shù)問題么?NO!在處理group操作的時(shí)候還有BUG:

為了說明問題,我們先來生成一些測(cè)試數(shù)據(jù):
復(fù)制代碼 代碼如下:
<?php
ini_set('mongo.native_long', 1);
$instance = new Mongo();
$instance = $instance->selectCollection('test', 'test');
for ($i = 0; $i < 10; $i++) {
$instance->insert(array(
'group_id' => rand(1, 5),
'count' => rand(1, 5),
));
}
?>

下面讓我們使用group操作,根據(jù)group_id分組,匯總計(jì)算count:
復(fù)制代碼 代碼如下:
<?php
ini_set('mongo.native_long', 1);
$instance = new Mongo();
$instance = $instance->selectCollection('test', 'test');
$keys = array('group_id' => 1);
$initial = array('count' => 0);
$reduce = '
function(obj, prev) {
prev.count += obj.count;
}
';
$result = $instance->group($keys, $initial, $reduce);
var_dump($result);
?>

結(jié)果和預(yù)想的有出入,count沒有實(shí)現(xiàn)累加,而是變成了[object Object],目前,如果必須使用group操作,那么有兩種方法可以緩解這個(gè)問題:
復(fù)制代碼 代碼如下:
ini_set('mongo.native_long', 0);
$initial = array('count' => (float)0);

這兩種方法都是治標(biāo)不治本的權(quán)宜之計(jì),既然當(dāng)前php驅(qū)動(dòng)里group的實(shí)現(xiàn)有問題,那我們就繞開它,用其它的方式實(shí)現(xiàn)同樣的功能,這個(gè)方式就是MapReduce:
復(fù)制代碼 代碼如下:
<?php
ini_set('mongo.native_long', 1);
$instance = new Mongo();
$instance = $instance->selectDB('test');
$map = '
function() {
emit(this.group_id, this.count);
}
';
$reduce = '
function(key, values) {
var sum = 0;
for (var index in values) {
sum += values[index];
}
return sum;
}
';
$result = $instance->command(array(
'mapreduce' => 'test',
'map' => $map,
'reduce' => $reduce
));
$result = iterator_to_array($instance->{$result['result']}->find());
var_dump($result);
?>

把大象放冰箱里需要三步,而使用MapReduce僅僅需要Map和Reduce兩步即可,這里有一個(gè)PDF文檔生動(dòng)的說明了MySQL中GROUP BY和MongoDB中MapReduce的對(duì)應(yīng)關(guān)系:

 

SQL to MongoDB

此外,還有很多資料可供參考,如:MongoDB Aggregation III: Map-Reduce Basics。

說明:軟件版本為MongoDB(1.6.5),PECL Mongo(1.1.4)。不同版本結(jié)論可能不同。

php技術(shù)PHP操作MongoDB時(shí)的整數(shù)問題及對(duì)策說明,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 99视频在线观看免费视频 | 红尘影院在线观看 | 欧美国产精品久久久乱码 | 97国产揄拍国产精品人妻 | 亚洲欧美中文日韩视频 | 欧美成人中文字幕在线视频 | 旧里番ovaの催○セイ活指导 | 国产一区2区 | videos gratis欧美另类 | 舔1V1高H糙汉 | 国产亚洲精品久久久久久久 | 在线广播收听 | 你的欲梦裸身在线播放 | av影音先锋天堂网 | 国产午夜精品鲁丝片 | 伊人久久大香线蕉综合色啪 | 鲁大师影院在线视频在线观看 | 97超碰射射射 | 私人玩物在线观看 | 好嗨哟在线看片免费 | 成年人在线免费观看视频网站 | 精品国产麻豆免费人成网站 | 丰满人妻无码AV系列 | 久久re热线视频国产 | 国产在线播放KKK | 久久精品视频免费 | 九九精品在线播放 | 99久久免费热在线精品 | 亚洲免费在线观看 | 伊人国产在线播放 | 免费看黄的片多多APP下载 | 99久久精品费精品蜜臀AV | 一个人免费视频在线观看高清版 | 国产精品永久AV无码视频 | AV色蜜桃一区二区三区 | 久久久精品成人免费看 | 13小箩利洗澡无码视频APP | 阴茎插入阴道 | 妹妹我要色 | 亚洲无吗在线视频 | 久久精品国产亚洲AV忘忧草蜜臀 |