- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我们的数据库 (PostgreSQL) 上有以下两个重复且独立运行的任务:
session 1 在事务中进行一些更新并设置更新数据集的时间戳:
BEGIN;
...
UPDATE table SET ..., timestamp = current_timestamp WHERE ...;
... // (A)
COMMIT;
session 2 选择自上次运行以来更新的所有数据集:
SELECT * FROM table WHERE timestamp BETWEEN last_run AND current_timestamp;
last_run = current_timestamp;
...
如果 session 2 在 session 1 处于 (A) 时开始,它将看不到更改,因为时间戳在提交之前不会被设置,而是设置为更早的值。此外,后续 session 2 不会选择更改,因为 last_run 已经大于时间戳。所以问题是 session 1 在错误的时间分别将时间戳设置为错误的值,因此可能会“忘记”更改。
一个可能的解决方法是在 session 1 中将更新的数据集 ID 存储在另一个表中,并在 session 2 中从该表中选择并删除它们。但也许有人有更好的主意......
最佳答案
This sort of question不时出现——据我所知,唯一完全可靠的方法是执行您所描述的操作,在第一个过程中将更新的 ID 存储在某个表中,并在第二个过程中将它们标记为已处理。基本上这是在数据库中重新发明一个消息队列。您已经很好地描述了天真的解决方案将如何错过更新。
让导入过程标记更新的行可以很容易地完成,甚至可以使用数据表上的触发器来实现。如果您只有一个消费者进程,那么它所要做的就是 delete from updated_item returning item_id
以获得更新列表。听起来好像要复杂得多,但恕我直言,事实并非如此。诸如能够免费监控积压量的功能也出现了。
关于sql - 在交易中设置时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9226322/
给定一个带有多个 date_time 戳的字符串,我想 提取第一个戳及其前面的文本 候选字符串可以有一个或多个时间戳 后续的 date_time 戳记将被 sep="-" 隔开 后续date_time
是否可以合并从相机拍摄的文本和照片?我想在照片上标记日期和时间,但我在 Google 上找不到任何内容。 最佳答案 使用下面的代码来实现你所需要的。 Bitmap src = Bitm
有没有办法通过 Graph API 戳另一个用户?基于this post ,并使用 Graph Explorer ,我发布到“/USERID/pokes”,我已经授予它(Graph API 应用程序和
我有两个向左浮动的元素。一个是 body 的第一个 child ,另一个是容器的第一个 child ,容器是 body 的第二个 child 。 ...
我是一名优秀的程序员,十分优秀!