我有一个Web服务,用于管理文件系统上的文件,这些文件也在Microsoft SQL Server数据库中跟踪。我们有一个.NET系统服务,它监视使用FileSystemWatcher类添加的文件。当文件添加的回调来自FileSystemWatcher时,有关该文件的元数据被添加到我们的数据库中,并且它运行良好。
我现在遇到了一些可扩展性问题。我正在快速连续地将大量文件添加到文件系统中,这最终会导致数据库被添加文件,从而导致锁定我的Web前端。
我还没有处理数据库scability问题,所以我试图提出缓解策略。我想的可能是缓存文件添加,并且每五分钟左右只将它们写入数据库,但我不确定它是多么实用。这是需要在某个时刻进入我们的数据库的数据,所以它必须在某些时候受到重创。也许我可以将每秒写入的文件数据库条目的数量限制为一定量,但是我冒这个数量的风险小于添加文件的速度。我怎样才能最好地解决这个问题呢?
答案 0 :(得分:2)
您是否考虑使用SQL Server Service Broker之类的内容?通过这种方式,您可以在突发中推送大量条目,并将插入数据库中的插入内容。
基本上你要将消息推送到一个队列,然后由接收器存储过程使用它来为你执行插入操作。您可以限制执行的最大接收者数量,以帮助解决Web界面中的响应问题。
有一篇很好的介绍文章here。虽然它是2005年,但2005年和SQL Server的新版本之间并没有太大的变化。
答案 1 :(得分:1)
您遇到了性能问题,应该使用Waits and Queues等性能调查方法来解决它。一旦确定实际问题,我们就可以讨论解决方案。
这只是一个猜测但是,假设通知'更新元数据'代码是一个直接向前插入,可能的问题是您每个通知生成一个事务。这会导致提交刷新等待,请参阅Diagnosing Transaction Log Performance 。批量提交(在提交之前聚合多个通知)是规范的解决方案。
答案 2 :(得分:0)
第一个选项是使用缓存来处理大量数据。或使用集群来分析大量数据。请click here了解更多信息。