0

我正在开发一个多线程 .NET 4 应用程序,它连续获取数据并将它们写入 SQL 数据库(MySQL 或 SQL Server - 尚不确定)。

每次INSERT执行 a 时,至少需要一个先验SELECT才能与数据库同步。这意味着应用程序获得一个包含新旧数据的块,然后必须检查哪些数据集是新的,哪些已经在数据库中。

这意味着其中的很多SELECTS结果每次都会产生或多或少相同的数据。

在应用程序中保存每个表的最后 x 个条目的副本是个好主意吗?这样可以在副本而不是数据库上进行同步。

临:

  • 快点

反对:

  • 占用大量内存
  • 与数据库不同步的风险

你怎么看?这种用例的最佳实践是什么?还有其他优点和缺点吗?

4

2 回答 2

1

除非您同时有外部程序写入数据库,否则可以使用缓冲。

但不是缓冲 SELECT 结果,只需将最后 X 个(合理数量)插入请求的缓冲区添加到 insert 方法,并且仅当它不在该列表中时才插入新的。

您可能还想锁定插入方法,以确保包含检查始终正确。

于 2012-11-01T09:21:28.647 回答
1

如果您有多个进程写入数据库,那么在内存数据和数据库之间保持完美同步并非易事。事实上,确认您已同步的唯一方法是对数据库进行 SELECT 查询。因此,您可以在完美同步和具有一定容差的同步之间进行权衡,这是非常有效的。

我的建议可能对这两种情况都有帮助,那就是:

  1. 调整您的 SELECT 查询。必要时添加索引。
  2. 创建元数据,例如版本号。因此,您只需检查一些非常琐碎的事情即可确定是否需要同步。
  3. 编写一个存储过程来实现您的 SELECT 和 INSERT 逻辑。这样您就不必担心对数据库进行多次调用。
于 2012-11-01T17:59:21.817 回答