我正在处理多线程.NET 4应用程序,该应用程序连续获取数据并将其写入SQL数据库(MySQL或SQL Server)。
>每次执行INSERT
时,都需要在一个先前的 SELECT
处进行以便与数据库同步。这意味着应用程序将获得一个包含新数据和旧数据的块,然后必须检查哪些数据集是新的,哪些已经在数据库中。
这意味着大量的SELECTS
,每次或多或少都会导致相同的数据。
在应用程序中拥有每个表的最后一个X条目的副本是一个好主意吗?这样,可以在副本而不是数据库上进行同步。
pro:
- 更快
contra:
- 使用很多内存
- 与数据库无关的风险
您怎么看?这种用例的最佳实践是什么?还有其他优点和缺点吗?
除非您同时使用外部程序编写外部程序,否则可以使用缓冲。
但是,只需添加最后一个X的缓冲区(一个合理的数字)插入请求,而不是添加到插入方法,而不是插入新列表,则仅插入。
。您可能还需要锁定插入方法,以确保包含检查始终正确。
如果您有多个写入数据库的过程,则在内存数据和数据库之间保持完美的同步是不平凡的。实际上,确认您同步的唯一方法是在数据库上进行选择查询。因此,您在完美同步和同步之间具有一定的耐受性之间的权衡。
我的建议在两种情况下都可能有帮助,将是:
- 调整您的选择查询。如有必要,添加索引。
- 创建元数据,例如版本号。因此,您只需要检查一些非常微不足道的东西即可确定是否需要同步。
- 编写一个存储的Proc,该Proc实现您的选择并插入逻辑。那么,您不必担心对数据库进行多次调用。