gpt4 book ai didi

database - 如何将 Web 服务的结果与数据库同步?

转载 作者:搜寻专家 更新时间:2023-10-30 20:33:10 24 4
gpt4 key购买 nike

我正在寻找一种方法来快速比较数据库表的状态与 Web 服务调用的结果。

我需要确保数据库中存在 Web 服务调用返回的所有记录,并且数据库中不再存在于 Web 服务响应中的所有记录都从表中删除。

我有问题要解决:

  1. 如何快速比较数据结果的结构数据库表?
  2. 当我找到一个差异,我如何快速添加有什么新的,删除什么?

对于数字 1,我正在考虑对数据结构进行 MD5 并将其存储在数据库中。如果 MD5 不同,那么我会转到第 2 步。是否有更好的方法将响应数据与数据库状态进行比较?

我需要关于第 2 点的更多指导。我可以轻松地从表中检索所有记录 (SELECT * FROM users WHERE user_id = 1),然后遍历一个数组,添加数据库中不存在的内容,并创建另一个项目数组在随后的电话中删除,但我希望更好(更快)的是这样做。 将数据结构与数据库表的子集进行比较和同步的最佳方法是什么?

感谢您对这些问题的任何见解!

最佳答案

我最近遇到了类似的问题。我们——非常简单——的解决方案是将 Web 服务数据加载到一个与数据库表具有相同结构的表中。 DB 表保留其最重要列的哈希值,并将相同的哈希函数应用于 Web 服务表中的相应列。

“同步”逻辑如下所示:

  1. 从 web 服务表中删除任何具有数据库表中确实存在的散列的行。这是不需要同步的重复数据。

    DELETE FROM ws_table WHERE hash IN(SELECT hash from db_table);

  2. 从 DB 表中删除在 Web 服务表中没有找到哈希值的所有行。

    DELETE FROM db_table WHERE hash NOT IN (SELECT hash FROM ws_table);

  3. Web 服务表中剩余的任何内容都是新数据,现在应该插入到数据库表中。

    INSERT INTO db_table SELECT ... FROM ws_table;

这是一种相当蛮力的方法,如果以事务方式完成(即使只是第 2 步和第 3 步)会在持续时间内锁定数据库表,但它非常简单。

一个改进是使用 UPDATE 语句来处理更改的记录,但这会增加很多复杂性,并且可能不会比 DELETE 后跟一个 INSERT

另一个可能的优化是设置一个标志而不是删除行。然后可以稍后删除这些行。但是,任何使用数据库表的逻辑都必须忽略带有设置标志的行。

关于database - 如何将 Web 服务的结果与数据库同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/297572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com