检测已删除记录的最佳方法是什么?

时间:2013-10-08 17:21:28

标签: mysql json

这不是关于我没有工作的一些代码的问题,而是我正在寻找如何解决问题的指导。鉴于您熟悉的任何编程或脚本语言,您将如何解决此问题:

您将获得两组数据:每晚从远程系统检索的JSON对象,以及跟踪该JSON对象中的数据的MySQL数据库。 JSON对象可能包含数百条记录,数据库会跟踪所有这些单独的记录,并跟踪对这些记录的任何更改。 JSON对象中的记录顺序偶尔也会更改。每个记录在JSON对象和MySQL数据库中都有一个与之关联的UID。

但是,有时会在此远程系统上删除记录。 JSON没有通过在对象中将其标记为已删除或非活动来反映此删除。相反,这个记录根本就没有了。

考虑到JSON对象中记录的排序可能会在夜间发生变化这一事实,检测缺少记录以及缺少哪条记录的最佳方法是什么?

编辑

有人问我申请是什么。我是一所大学的软件开发人员。我每晚收到学生日程安排数据(JSON)。我想跟踪日程安排数据的变化,并通知学生日程安排的变化。

MySQL数据库记录了日程安排中的所有事件,目前大约有10,000条记录。

编辑2

基本上,给定一个主数据库并将其与该数据库的子集进行比较,我正在寻找子集中缺少的项目。

3 个答案:

答案 0 :(得分:1)

我认为最好的方法是进行一些改变)

如果这不可能,您可以使用后续查询

  

UPDATE ... UID NOT IN IN(UIDS列表)

长列表,长查询,但不是很慢(你有UID索引吗?)

添加了: 您还可以存储最后一个json(或仅UID)并在数据库更新之前将其与new进行比较,收集差异并应用于MYSQL。

答案 1 :(得分:1)

我可能会从这样一个简单的工作流程开始:

  1. 循环收集活动UID的json
  2. 使用where ID in(...)
  3. 从mysql获取工作集
  4. 遍历工作集寻找差异,应用更改
  5. 使用
    标记新删除的记录  set Removed = 1 where ID not in(...) and Removed = 0

答案 2 :(得分:0)

我。每晚将JSON导入临时表 II。将临时表与真实表进行比较。

IIA。在真实的表中,不在临时表中删除了 IIB。在临时表中没有在实际表格中添加

您可以将它们放在两个单独的表中

ItemsAdded
  ItemsDeleted

III。用临时表中的数据替换真实表