C#数据存储库:捆绑&按间隔刷新数据。模式,以防止应用程序关闭/崩溃的故障安全?

时间:2017-12-11 15:05:21

标签: c# entity-framework

我正在尝试创建一个存储库,该存储库本身可以捆绑几个要添加到数据库的项目,然后在特定的时间间隔内执行批量插入操作。像

这样的东西
public interface MyRepository
{
  void InsertDeferred(DTO.Item item);
}

存储库将捆绑所有项目,并且每隔30秒左右对基础SQLite数据库(通过EFCore)执行批量插入操作,其中包含自上次刷新以来添加的所有项目。

是否有任何模式可以做到尽可能安全无故障?否则,如果应用程序在下一次刷新之前关闭(预期或未预期),可能会丢失大量数据...

我认为主要的日志库(log4net等)也可以选择只刷新他们在间隔中的写入 - 有没有人知道他们是否想出了一种聪明的方法来防止或减少数据丢失?

谢谢!

1 个答案:

答案 0 :(得分:0)

我会写一个BlockingCollection,并从那里读取一个线程并写入磁盘。您可以使用BlockingCollection的大小控制潜在的数据丢失,以及在刷新到磁盘之前是否让读取线程等待一定的时间间隔或最小数量的项目。