在应用程序中拥有SQL数据的副本是一个保存SQL SELECTS的好主意吗?

时间:2012-11-01 09:15:37

标签: sql sql-server performance architecture

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

每次执行INSERT时,必须先在SELECT之前按顺序执行,以便与数据库同步。这意味着应用程序获取一个包含新旧数据的块,然后必须检查哪些数据集是新的,哪些数据集已经存在于数据库中。

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

在应用程序中为每个表创建最后x个条目的副本是否是个好主意? 这样,可以在副本而不是数据库上完成同步。

亲:

  • 更快

魂斗罗:

  • 使用大量内存
  • 与数据库不同步的风险
你怎么看?这种用例的最佳实践是什么? 还有其他优点和缺点吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

如果有多个进程写入数据库,保持内存数据和数据库之间的完美同步是非常重要的。实际上,确认同步的唯一方法是在数据库上进行SELECT查询。因此,您需要在完美同步和同步之间进行权衡,并采用一些非常有效的容差。

我的建议在两种情况下都有帮助:

  1. 调整SELECT查询。必要时添加索引。
  2. 创建元数据,例如版本号。所以你必须只检查一些非常微不足道的东西来确定你是否需要同步。
  3. 编写一个实现SELECT和INSERT逻辑的存储过程。然后,您不必担心多次调用数据库。