我在数据库中有近100.000条记录,我需要将它们与最长公共子序列算法进行比较,我需要每天使用1000条新记录进行比较。 我的应用程序是用c#.Net编写的,问题是这种比较在应用程序级别上运行缓慢,因为需要比较1000条记录超过10小时。 那么有人知道如果我在SQL中的存储过程中编写这个算法会有多快,或者还有其他方法吗?
答案 0 :(得分:4)
如果您使用的是SQL Server 2005或2008,则可能需要尝试在C#中编写存储过程。从长远来看,这可能会更好地扩展,因为您获得越来越多的记录并且无法将它们全部保留在内存中。
查看MSDN Introduction to SQL Server CLR Integration。
这将在您的数据库服务器上使用更多CPU,但您不必来回传输数据。
答案 1 :(得分:3)
如果您'只有'100.000条记录。只需在应用启动时收集它们。在内存中执行算法,并在完成后将任何结果/更改存储到数据库中。
它会快得多
答案 2 :(得分:1)
我不确定TSQL会为您提供与C#允许的相同的灵活性,尤其是当您处理LCS等复杂算法时。将所有需要的记录存储在内存中并从那里处理它们。
现在最重要的是你可以在一分钟之外思考并采取其他方法,一旦插入新项目,尝试插入某种类型的标志(排名)。没有人可以在这里给你建议,因为你没有提供一点点数据,你在做什么,你在比较什么。也许你可以通过在新项目插入期间进行一些排名来简化流程。我不是要在添加新项目后进行全面比较,而是在每小时左右触发事件,在没有用户输入的情况下更新表格。
答案 3 :(得分:0)
确实,存储过程比LinQ或View工作得更快。这就是快速收集数据的方法。
答案 4 :(得分:0)
您如何确定您的两条记录彼此之间(即它们是子序列的一部分)?也许你不需要比较每个记录的整个1MB,只能通过分析其中的一部分来加快速度?
听起来像你的算法存在缺陷,或者如果数据库花费2秒钟来比较每条记录,那么数据库可能不是存储数据的最佳方式吗?