- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在寻找一种方法来快速比较数据库表的状态与 Web 服务调用的结果。
我需要确保数据库中存在 Web 服务调用返回的所有记录,并且数据库中不再存在于 Web 服务响应中的所有记录都从表中删除。
我有问题要解决:
对于数字 1,我正在考虑对数据结构进行 MD5 并将其存储在数据库中。如果 MD5 不同,那么我会转到第 2 步。是否有更好的方法将响应数据与数据库状态进行比较?
我需要关于第 2 点的更多指导。我可以轻松地从表中检索所有记录 (SELECT * FROM users WHERE user_id = 1),然后遍历一个数组,添加数据库中不存在的内容,并创建另一个项目数组在随后的电话中删除,但我希望更好(更快)的是这样做。 将数据结构与数据库表的子集进行比较和同步的最佳方法是什么?
感谢您对这些问题的任何见解!
最佳答案
我最近遇到了类似的问题。我们——非常简单——的解决方案是将 Web 服务数据加载到一个与数据库表具有相同结构的表中。 DB 表保留其最重要列的哈希值,并将相同的哈希函数应用于 Web 服务表中的相应列。
“同步”逻辑如下所示:
从 web 服务表中删除任何具有数据库表中确实存在的散列的行。这是不需要同步的重复数据。
DELETE FROM ws_table WHERE hash IN(SELECT hash from db_table);
从 DB 表中删除在 Web 服务表中没有找到哈希值的所有行。
DELETE FROM db_table WHERE hash NOT IN (SELECT hash FROM ws_table);
Web 服务表中剩余的任何内容都是新数据,现在应该插入到数据库表中。
INSERT INTO db_table SELECT ... FROM ws_table;
这是一种相当蛮力的方法,如果以事务方式完成(即使只是第 2 步和第 3 步)会在持续时间内锁定数据库表,但它非常简单。
一个改进是使用 UPDATE
语句来处理更改的记录,但这会增加很多复杂性,并且可能不会比 DELETE
后跟一个 INSERT
。
另一个可能的优化是设置一个标志而不是删除行。然后可以稍后删除这些行。但是,任何使用数据库表的逻辑都必须忽略带有设置标志的行。
关于database - 如何将 Web 服务的结果与数据库同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/297572/
我们使用 Azure 弹性池,生成多个客户端数据库和一个引用客户端数据库的主数据库。 我们已经拥有多个数据库,并且正在开发新版本的代码。我们使用 EF6 代码优先。当我们对模型进行更改(添加属性)时,
我们使用 Azure 弹性池,生成多个客户端数据库和一个引用客户端数据库的主数据库。 我们已经拥有多个数据库,并且正在开发新版本的代码。我们使用 EF6 代码优先。当我们对模型进行更改(添加属性)时,
我希望将一些信息分发到不同的机器上,以便在没有任何网络开销的情况下实现高效和极快的访问。数据存在于关系模式中,实体之间的关系是“加入”的要求,但根本不是写入数据库的要求(它会离线生成)。 我非常相信
我使用 GrapheneDB 来托管我的 neo4j 数据库 (db)。 问题 我有 N客户并且正在寻找自动分离他们的内容(他们独特的数据库)的方法,以便: 它不重叠数据 操作速度不受影响。 选项 1
当服务器开始工作(Tomcat)时,日志显示此错误: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid b
我在 Oracle 数据库实例中按以下方式创建了一个触发器。 CREATE OR REPLACE TRIGGER after_logon_on_database AFTER LOGON ON DATA
原谅我的无知,我是数据库约定的初学者。 这是我的 SQLite 代码:(由我的数据库浏览器自动生成) CREATE TABLE `ResearchItems` ( `ID` INTEGER NO
是的是的是的,我已经在整个互联网上搜索过这个问题。一些结果发现,甚至来自 Stackoverflow。但是他们中的大多数人说“你应该自动加载数据库”,或者“parent::__construct();
我正在创建一个 Mac 应用程序,它将一些数据保存到 SQLite 数据库中。问题是:当我关闭数据库并再次打开时,数据不存在了。这是我的代码: NSString *sql = [NSString st
我正在建立一个网站,我打算发布各种帖子,比如教程、文章等。我打算用 php 来管理它,但是当涉及到存储每个帖子的内容时,将要显示的文本,更好的选择是:使用单独的文本文件还是将其添加为数据库中的每个条目
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
对不起,这个关键字对我来说没有任何意义...有人可以给我一个定义吗? 提前致谢... 最佳答案 这是一个品牌。 http://pervasive.com/这是他们的数据库产品的链接 http://ww
我已经在 docker 版本 1.10.1 的 docker 镜像中安装了 PostgreSQL 9.4.6。根据这张官方图片: https://github.com/docker-library/p
当我的 android 应用程序尝试读取 android 短信数据库时,我遇到了这个崩溃。读取android短信数据库的代码类似于下面的代码 fragment : String SMS_URI = "
我有一个 public kit repo,我推送了 v1.0.3 并具有以下结构 go -database --database.go --go.mod --go.sum 我需要它 require g
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
我们正在使用MySQL数据库在Go中创建一个Web应用程序。我们的用户一次只能拥有一个活跃的客户端。就像Spotify一样,您一次只能在一台设备上听音乐。为此,我制作了一个映射,将用户ID和作为其值的
我已经尝试在 PostgreSQL 中创建数据库好几天了,遇到了几个问题,但似乎卡住了。 我在 PostgreSQL 中手动创建了一个名为 postgres_development 的数据库,因为 b
我正在创建一个 iMessage 应用程序,它需要连接到与我的常规应用程序相同的数据库。 我调用 FirebaseApp.configure() 并对用户进行身份验证,但出于某种原因,在所有 Data
就像std::unordered_map但所有数据都应存储在磁盘上而不是内存中。 按照我的理解,应该做两部分:索引和存储。我已经学习了一些关于索引的数据结构,比如 Linear-Hash 或 B-Tr
我是一名优秀的程序员,十分优秀!