假设我有3张桌子(LiveDataTable
,ReducedDataTable
,ScheduleTable
)。
基本上,我有一个事件流->每当我收到一个事件时,我就把这个事件的提取数据写到LiveDataTable
。
问题是,有大量的事件,这就是为什么LiveDataTable
可能会变得非常巨大的原因,所以我有另一个ReducedDataTable
在这里合并LiveDataTable
中的行(考虑从LiveDataTable
中选择100行,将其减少到1行,并将其写入ReducedDataTable
中,然后从LiveDataTable
中删除这100行)。
为了确定执行这些reducing operations
的正确时间,有ScheduleTable
。您可能认为1行ScheduleTable
对应于1 reducing operation
。
我希望能够从List<Data> getData()
支持Interface
方法。有两种情况:我要么只从ReducedDataTable
读取结果,要么合并ReducedDataTable
和LiveDataTable
的结果。
下面是我的缓存是如何一步一步工作的:
从ScheduleTable
读取一行
从LiveDataTable
写入ReducedDataTable
(至少4行)
从LiveDataTable
中删除(从ScheduleTable
中删除一行
问题是,当接收到LiveDataTable
请求时,我想确定是否应该以编程方式读取ReducedDataTable
和getData()
。对于每一步(在3之前),我想从LiveDataTable
开始阅读,然后我想从ReducedDataTable
开始阅读。当接收到getData()
请求时,如何确定当前正在执行的步骤?
我之所以问这个问题,我相信这是DB处理并发时的一个常见问题。
最佳答案
(假设您的压实过程足够快)
您可以首先从小表中乐观地读取数据,如果数据丢失,则从未压缩的表中读取。
在大多数情况下,只有一个请求,而不是两个。
否则,您可以维护已经压缩的数据的时间戳。
关于database - 如何处理数据库并发?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49983828/