python看linux日志过滤,python – CouchDB – 从列表中筛选每个记录...

这就是我的工作.这是边缘CouchDB滥用,但我已经取得了很大的成功.

通常,reduce会计算总和,或计数,或类似的东西.但是,将reduce视为淘汰赛.许多价值观都在流传.只有一个值出现.减少!一遍又一遍地重复,你有最终的赢家(重新减少).在这种情况下,具有最新时间戳的日志是赢家.

当然,welterweights无法对抗重量级人物.必须有联赛和重量级.只有某些文档与某些其他类似文档进行战斗才有意义.这正是reduce group参数的作用.它将确保只有均匀匹配的角斗士进入我们的血液运动中的钢笼. (咖啡正在踢.)

首先,发出由设备键入的所有日志.发出的值只是文档的副本.

function(doc) {

emit(doc.name, doc);

}

接下来,编写reduce函数以返回所有给定值的最新时间戳.如果你看到来自不同联赛的两个角斗士之间的斗争(来自不同系统的两个日志),请停止战斗!出了点问题(有人在没有正确的组值的情况下查询).

function(keys, vals, re) {

var challenger, winner = null;

for(var a = 0; a < vals.length; a++) {

challenger = vals[a];

if(!winner) {

// The title is unchallenged. This value is the winner.

winner = challenger;

} else {

// Fight!

if(winner.name !== challenger.name) {

// Stop the fight! He's gonna kill him!

return null; // With a grouping query, this will never happen.

} else if(winner.timestamp > challenger.timestamp) {

// The champ wins! (Nothing to do.)

} else {

// The challenger wins!

winner = challenger;

}

}

}

// Today's champion lives to fight another day.

return winner;

}

(注意,时间戳比较可能是错误的.您可能需要转换为日期.)

现在,当您使用?group = true查询视图时,CouchDB将仅使用相同的密钥(即您的计算机名称)减少(在两者之间找到赢家)值.

(您也可以将数组作为键发出,这样可以提供更多的灵活性.您可以发出([doc.name,doc.timestamp],doc).所以您可以通过系统查看所有日志,例如?reduce = false& startkey = [“NAS”,null]& endkey = [“NAS”,{}]或者你可以通过系统查看最新的日志?group_level = 1.

最后,“停止战斗”的东西是可选的.您可以随时返回带有最新时间戳的文档.但是,我更喜欢将它保留在那里,因为在类似的情况下,我想看看我是否正确地减少了地图,并且null减少输出是我的大线索.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值