我如何维护 oracle 和 couchbase 中的数据快照
how do i maintain snapshot of data in oracle and 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:
I can have a revision number column in the table and every day a file
is read i get the unique revision number for that day and while
inserting records into DB for that day i use the revision number. But
for this, i need to store the revision number somewhere else and every
time i need to read data i have to do an extra lookup to get the
current version number.
Approach2:
Every time a record is updated maintain last_modified_date column and
after batch run which ever is not modified remove those records(this
might be costly).
上述方法可能适用于 oracle,但对于 couchbase,我正在考虑为每条记录设置 TTL 来解决这个问题。
有人可以就此提出任何其他更好的方法吗?
您可以使用标志来维护记录验证。
每天所有记录都将被标记为 'not valid',在批处理过程中,如果缺少记录则添加记录,如果记录已存在则标记为 'valid'。
我对 Couchbase 中的 TTL 持谨慎态度。如果您的批处理计划被延迟,您将丢失所有数据。
方法 2 对我来说似乎是最干净的,您可以相应地利用 Oracle 和 Couchbase 中的 merge/upsert 来 insert/update。在 Oracle 中,您需要物理或临时暂存 table 来提高 MERGE
性能。对于 Couchbase,您将使用大量 UPSERT
.
我有一个 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:
I can have a revision number column in the table and every day a file is read i get the unique revision number for that day and while inserting records into DB for that day i use the revision number. But for this, i need to store the revision number somewhere else and every time i need to read data i have to do an extra lookup to get the current version number.
Approach2:
Every time a record is updated maintain last_modified_date column and after batch run which ever is not modified remove those records(this might be costly).
上述方法可能适用于 oracle,但对于 couchbase,我正在考虑为每条记录设置 TTL 来解决这个问题。
有人可以就此提出任何其他更好的方法吗?
您可以使用标志来维护记录验证。
每天所有记录都将被标记为 'not valid',在批处理过程中,如果缺少记录则添加记录,如果记录已存在则标记为 'valid'。
我对 Couchbase 中的 TTL 持谨慎态度。如果您的批处理计划被延迟,您将丢失所有数据。
方法 2 对我来说似乎是最干净的,您可以相应地利用 Oracle 和 Couchbase 中的 merge/upsert 来 insert/update。在 Oracle 中,您需要物理或临时暂存 table 来提高 MERGE
性能。对于 Couchbase,您将使用大量 UPSERT
.