在瑞典最受欢迎的网站之一工作时,我遇到了一个(对我来说)奇怪的片段,它在每个页面上运行:
if( rand(0, 100) === 50 )
// increase visitor count
它的作用是生成一个随机数,如果它等于一个固定数(在本例中为 50),它将增加访问者计数。在显示统计信息的页面上,访客数乘以例如100后才显示。
我确实意识到为每个页面 View 写入数据库可能并不理想,尤其是对于像这样的非常大的网站。但这真的会生成正确的统计数据吗?仅仅因为 99 个访问者的随机数等于除 100 以外的所有内容,并不意味着下一个访问者将获得 100。
我是 react 过度了,还是这是一个糟糕的统计实现?
最佳答案
好的,我想我明白了。简而言之 - 这种方法可以足够准确,而且我从“瑞典最受欢迎的网站之一”了解到这是一种很好的方法。让我解释一下:
三个因素:
我可以将它翻译成代码:
如在任何页面中所见:
//are you here? you are an ACTUAL visit
if(rand(0, 100) === 50){
//are you here? you are a TRACKED visit
//passing info to the database as current number+1
}
在统计页面中:
//variable $tracked is number of tracked visits from the page
//this is a CALCULATED visit
echo 'Page visits: '.$tracked*100;
我还可以说,实际访问也有 1% 的机会成为跟踪访问。但是现在下面的问题来了:为什么我只需要跟踪 1% 的访问?我不能只跟踪所有访问吗?
If every page gets 1000 views/min this method is a great performance booster, and can give rather good results (close enough to the actual visits).
If every page gets 100 views/min this method can also boost some performance, and will probably give pretty accurate results.
谈到性能,想象一下每分钟 1000 个数据库查询。我个人认为这样做不好。所以为了降低查询量,你(或他们)实际上通过在数据库入口放一个“守卫”来限制对数据库的调用次数,随机问你一个问题,只是为了平衡人数里面。
当然,现在您必须在性能和准确性之间找到完美的平衡点。你可以自己模拟一下:
$actual将帮助您找到最终结果的准确性$hits会显示命中数(通过守卫的人)$hit_chance将限制通过结果的数量。越高,性能越好,但精度较低。看它!如果设置为 100,机会将为 %1(1/100),如果设置为 10000,机会将为 1/10000,如果设置为 10 1/10(10%),等等...$final将显示计算出的访问量。<子>子>
$actual = 7000; //set the number of visits you want to check (check the current site statistics!)
$hits = 0; //initialization of variable
$hit_chance = 100; //set hit chance, currently 1%
$answer = intval(round($hit_chance / 2, PHP_ROUND_HALF_UP)); //just set answer between 0 and $hit_chance, which is an integer
for($i=0;$i<$actual;$i++){
if(rand(0, $hit_chance) === $answer){
$hits++;
}
}
$final = $hits * $hit_chance;
$accuracy = 100 - ((($actual - $final) / $actual) * 100);
echo 'Actual visits: '.$actual;
echo '<br>Hits: '.$hits;
echo '<br>Final results: '.$final;
echo '<br>Result accuracy: '.$accuracy.'%';
再想想,就看你自己了——我觉得没有好坏之分。也许服务器非常好,您不需要它,也许他们需要节省一些性能。
关于php - 如果随机数等于固定数,则更新访问者计数 [if random == fixed : increase visitor count],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13326968/
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat
如果我使用ruby版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
我正在尝试为我的iOS应用程序设置cocoapods但是当我执行命令时:sudogemupdate--system我收到错误消息:当前已安装最新版本。中止。当我进入cocoapods的下一步时:sudogeminstallcocoapods我在MacOS10.8.5上遇到错误:ERROR:Errorinstallingcocoapods:cocoapods-trunkrequiresRubyversion>=2.0.0.我在MacOS10.9.4上尝试了同样的操作,但出现错误:ERROR:Couldnotfindavalidgem'cocoapods'(>=0),hereiswhy:U
这太简单了,太荒谬了,我在任何地方都找不到关于它的任何信息,包括API文档和Rails源代码:我有一个:belongs_to关联,我开始理解当您没有关联时您在Controller中调用的正常模型方法与您有关联时调用的方法略有不同。例如,我的关联在创建Controller操作时运行良好:@user=current_user@building=Building.new(params[:building])respond_todo|format|if@user.buildings.create(params[:building])#etcetera但我找不到关于更新如何工作的文档:@user
啊,正则表达式有点困惑。我正在尝试删除字符串末尾所有可能的标点符号:ifstr[str.length-1]=='?'||str[str.length-1]=='.'||str[str.length-1]=='!'orstr[str.length-1]==','||str[str.length-1]==';'str.chomp!end我相信有更好的方法来做到这一点。有什么指点吗? 最佳答案 str.sub!(/[?.!,;]?$/,'')[?.!,;]-字符类。匹配这5个字符中的任何一个(注意,。在字符类中并不特殊)?-前一个字符或组