我如何维护oracle和couchbase中的数据快照

时间:2016-07-07 18:07:00

标签: oracle spring-batch couchbase

我有一个spring批处理,每天读取一个文件并将数据插入oracle和couchbase。还有其他应用程序从这些数据源读取数据,为此我只需要表中的最新记录数据。

让我们举个例子 第1天:我收到了带有以下记录的文件

123,student1,gradeA ( id,name,grade)
124, student2, gradeA ( id, name, grade)

第2天:我收到了以下记录的文件

123,student1,gradeB ( id,name,grade)

所以我需要做的是

 1. on Day1 I should insert all the records of the file as initially table is empty
 2. On Day2 I need to invalidate the record for "124" as that is not in file
 3. On Day2 Update the record for "123" with new grade

所以在第2天,如果有任何读取请求来自“124”,我应该抛出异常(未找到数据)。

我想到的几种方法

Approach 1: 
  

我可以在表格中有一个修订号列,每天都有一个文件   读取我获得当天和时间的唯一修订号   在那天将记录插入数据库我使用修订号。但   为此,我需要将修订号存储在其他地方和每个地方   时间我需要读取数据我必须做一个额外的查找才能获得   当前版本号。

Approach2:
  

每次更新记录时都要保留last_modified_date列和   批量运行后,没有修改删除那些记录(这   可能代价高昂。)

上述方法可能适用于oracle,但对于couchbase,我想为每条记录都有TTL来解决这个问题。

有人可以就此建议任何其他更好的方法吗?

2 个答案:

答案 0 :(得分:0)

您可以使用标记来保持记录验证 每天所有记录都会被标记为“无效”。并且在批处理过程中添加记录(如果缺失或标记记录为“有效”'如果它已经存在。

答案 1 :(得分:0)

我对Couchbase中的TTL持谨慎态度。如果您的批处理计划延迟,您将丢失所有数据。

方法2对我来说似乎最干净,您可以利用Oracle和Couchbase中的merge / upsert相应地插入/更新。在Oracle中,您需要物理或临时临时表来提高UPSERT性能。对于Couchbase,您可以使用批量test_algo