Go 处理大量查询并避免重复
我的项目涉及并发和数据库管理。这意味着我必须在所有线程之间同时编辑数据库。更具体地说,我从数据库中读取一行,然后插入一行来标记我抓住了那行。这可能适用于事务,但由于我将在多台机器上运行此程序,因此在每台机器上都有不同的数据库连接。他们是我完成上述任务的更好方式吗 这里必须使用事务和版本字段/列(可以是时间戳或时间戳加上实际版本号(仅增加)或版本号的其他机制)应用乐观并发 但由于您在不同的机器上执行此操作,因此可能会发生大量重复的失败事务 为了防止这种情况,您可以使用排队机制。dispatcher程序从数据库读取未处理的记录,并使用队列或作业调度器将其分派给工作人员。然后,每个工人将从该队列中获取id,并在事务中处理它 这样:Go 处理大量查询并避免重复,go,Go,我的项目涉及并发和数据库管理。这意味着我必须在所有线程之间同时编辑数据库。更具体地说,我从数据库中读取一行,然后插入一行来标记我抓住了那行。这可能适用于事务,但由于我将在多台机器上运行此程序,因此在每台机器上都有不同的数据库连接。他们是我完成上述任务的更好方式吗 这里必须使用事务和版本字段/列(可以是时间戳或时间戳加上实际版本号(仅增加)或版本号的其他机制)应用乐观并发 但由于您在不同的机器上执行此操作,因此可能会发生大量重复的失败事务 为了防止这种情况,您可以使用排队机制。dispatcher
在这种情况下,请求/应答模式最能防止队列拥塞。我已经成功地(并且愉快地)使用了类似的案例。当然,您可以使用您选择的其他工具,但请记住,您必须处理请求/回复部分。仅仅在队列中扔东西并不能解决所有问题,排队的工作量应该得到控制 这里必须使用事务和版本字段/列(可以是时间戳或时间戳加上实际版本号(仅增加)或版本号的其他机制)应用乐观并发 但由于您在不同的机器上执行此操作,因此可能会发生大量重复的失败事务 为了防止这种情况,您可以使用排队机制。dispatcher程序从数据库读取未处理的记录,并使用队列或作业调度器将其分派给工作人员。然后,每个工人将从该队列中获取id,并在事务中处理它 这样: