是否在应用程序中拥有SQL数据的副本是保存SQL选择的好主意



我正在处理多线程.NET 4应用程序,该应用程序连续获取数据并将其写入SQL数据库(MySQL或SQL Server)。

>

每次执行INSERT时,都需要在一个先前的 SELECT处进行以便与数据库同步。这意味着应用程序将获得一个包含新数据和旧数据的块,然后必须检查哪些数据集是新的,哪些已经在数据库中。

这意味着大量的SELECTS,每次或多或少都会导致相同的数据。

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

pro:

  • 更快

contra:

  • 使用很多内存
  • 与数据库无关的风险

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

除非您同时使用外部程序编写外部程序,否则可以使用缓冲。

但是,只需添加最后一个X的缓冲区(一个合理的数字)插入请求,而不是添加到插入方法,而不是插入新列表,则仅插入。

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

如果您有多个写入数据库的过程,则在内存数据和数据库之间保持完美的同步是不平凡的。实际上,确认您同步的唯一方法是在数据库上进行选择查询。因此,您在完美同步和同步之间具有一定的耐受性之间的权衡。

我的建议在两种情况下都可能有帮助,将是:

  1. 调整您的选择查询。如有必要,添加索引。
  2. 创建元数据,例如版本号。因此,您只需要检查一些非常微不足道的东西即可确定是否需要同步。
  3. 编写一个存储的Proc,该Proc实现您的选择并插入逻辑。那么,您不必担心对数据库进行多次调用。

最新更新