Tag: primefaces

我可以在Rails 2.3中进行primefaces增量而不降低到SQL吗?

我们的应用程序中有一些经常命中的代码会增加一列,如下所示: if (r = customer.find_or_generate_reminder) r.counter += 1 r.save! end 我们正在获得锁定等待超时,因此我正在考虑将其作为primefaces操作。 天真,我想做的事情看起来像这样: if (r = customer.find_or_generate_reminder) connection.excute(‘UPDATE customer_reminders SET counter=counter+1, updated_at=now() WHERE id = ‘ + r.id) end 是否有一种ruby世界的方式做同样的事情?

续集(Ruby),如何以安全的方式增加和使用DB计数器?

我找到了4种“正确”的方法: 在ActiveRecord的备忘单中,用户替换ActiveRecord的increment , increment_counter应该是album.values[:column] -= 1 # or += 1 for increment和album.update(:counter_name=>Sequel.+(:counter_name, 1)) 在SO解决方案中, update_sql建议用于相同的效果s[:query_volume].update_sql(:queries => Sequel.expr(3) + :queries) 在随机线程中,我发现了这个数据集dataset.update_sql(:exp => ‘exp + 10’.lit) 在用于更新的Sequels API文档中,我找到了这个解决方案http://sequel.jeremyevans.net/rdoc/classes/Sequel/Dataset.html#method-i-update 然而,没有一个解决方案实际更新值并以安全,primefaces的方式返回结果。 基于“添加值然后保存”的解决方案应该在多处理环境中以不确定的方式失败,从而导致以下错误: 专辑的计数器是0 线程A和线程B都获取album 线程A和线程B都增加了散列/模型/ etc中的值 线程A和线程B都将计数器更新为相同的值 结果:A和B都将计数器设置为1并使用计数器值1 Sequel.expr , Sequel.expr和Sequel.+实际上并没有返回一个值,而是一个Sequel::SQL::NumericExpression和(afaik)你没有办法解决另一个DB往返问题,这意味着可以发生: 专辑的计数器是0 线程A和B都增加值,值增加2 线程A和B都从DB中获取行 结果:A和B都将计数器设置为2并使用计数器值2 因此,如果没有编写自定义锁定代码,那么解决方案是什么? 如果没有,没有编写自定义锁定代码:)最好的方法是什么? 更新1 我一般不满意答案说我想要太多的生活,因为1回答建议:) 专辑只是文档中的一个例子。 想象一下,例如,您在电子商务POS上有一个交易柜台,它可以在不同的主机上同时接受2个交易,并且您需要在24小时内发送一个唯一的整数计数器(称为systan),发送2具有相同systan和1的trx将被拒绝,或者更糟糕的是,计数中的间隙被警告(因为它们暗示“缺少事务”),因此不可能使用DB的ID值。 一个不太严重的例子,但与我的用例更相关,几个文件导出在后台worker中同时触发,每个文件目的地都有自己的计数器。 计数器中的间隙被警告,工作人员在不同的主机上(因此互斥体没有用)。 我有一种感觉,我很快就会解决更严重的问题。 数据库序列也不好,因为它意味着在添加每个终端时进行DDL,我们在这里谈论1000。 即使在我不太严重的用例中,门户网站上的DDLing操作仍然是PITA,甚至可能根据下面的缓存方案不起作用(由于ActiveRecord和Sequel – 在我的情况下我使用两者 – […]

primefaces地读写文件

我想在多个独立的Ruby进程(而不是线程)之间以primefaces方式读取和编写一个文件。 我在atomic_write找到了atomic_write。 这将写入临时文件,然后将其移动到原始文件并设置所有权限。 但是,这不会阻止文件在写入时被读取。 我还没有找到任何atomic_read 。 (文件读取是否已primefaces化?) 我是否需要在读取和写入之前实现我自己检查的单独“锁定”文件? 或者文件系统中是否存在更好的机制,用于将文件标记为“忙”,我可以在任何读/写之前检查? 动机是愚蠢的,但包括在这里是因为你会问这个问题。 我有一个使用Sinatra的Web应用程序,由Thin提供服务(由于其自身原因)使用JSON文件作为“数据库”。 每个对服务器的请求都会读取文件的最新版本,进行必要的更改,并将更改写入文件。 如果我只运行一个服务器实例,那就没问题了。 但是,我正在考虑在Apache反向代理后面运行Thin的多个副本。 这些是离散的Ruby进程,因此可以真正并行运行。 经过进一步的反思,我意识到我真的想做一个read-process-write atomic的行为。 此时我意识到这基本上迫使我一次只处理一个请求,因此没有理由让多个实例运行。 但是,关于primefaces读取和在写入期间阻止读取的好奇心仍然存在。 因此这个问题。