如何处理db并发?

时间:2018-04-23 14:41:55

标签: database concurrency cassandra

我们说我有3张桌子(LiveDataTableReducedDataTableScheduleTable)。

基本上我有一系列事件 - >每当我收到一个事件时,我都会将此事件的提取数据写入LiveDataTable

问题在于,有大量事件导致LiveDataTable变得非常庞大,所以我还有另一个ReducedDataTable来自LiveDataTable(考虑从LiveDataTable中选择100行,将其减少到1行,然后将其写入ReducedDataTable,然后从LiveDataTable删除这100行。

为了确定执行这些reducing operations ScheduleTable的正确时间。您可能认为1行ScheduleTable对应1 reducing operation

我希望能够从List<Data> getData()支持Interface方法。在2个案例中:我应该仅从ReducedDataTable阅读,或者合并ReducedDataTableLiveDataTable的结果。

以下是我的缓存如何逐步完成的工作:

  1. ScheduleTable
  2. 中读取1行
  3. 阅读LiveDataTable
  4. 写入ReducedDataTable(至少4行)
  5. LiveDataTable
  6. 中删除(&lt; = INT_MAX)行
  7. ScheduleTable
  8. 中删除1行

    问题是我想确定在收到LiveDataTable请求时是否应该以编程方式从ReducedDataTablegetData()读取。对于每一步(在#3之前),我想从LiveDataTable读取,然后我想从ReducedDataTable读取。如何确定我在收到getData()请求时目前正处于哪个步骤?

    我问这个问题的原因我认为这是处理并发时DB中的常见问题。

1 个答案:

答案 0 :(得分:0)

(假设您的压缩过程足够快) 您可以先乐观地从小表中读取数据,如果数据丢失 - 则从未压缩的数据中读取。 在大多数情况下,只有一个请求,而不是两个。

否则,您可以维护已经压缩的数据的时间戳。