Sql server 加快文件系统与数据库的速度,实现频繁的数据处理

Sql server 加快文件系统与数据库的速度,实现频繁的数据处理,sql-server,Sql Server,我需要将数据提供给数据处理windows服务(单向、松散耦合)。我想确保服务关闭等不会导致“丢失”数据,重新启动windows服务只会导致它在离开的地方重新开始工作,我需要系统非常容易进行故障排除,这就是我不使用MSMQ的原因 因此,我提出了两种解决方案中的一种——要么: 我将包含处理数据的文本文件放入一个放置目录,windows服务等待文件更改通知,然后处理并删除该文件 或 我在本地MS SQL数据库的一个特殊表中插入数据,windows服务轮询数据库中的更改/新项目,然后在处理这些更改

我需要将数据提供给数据处理windows服务(单向、松散耦合)。我想确保服务关闭等不会导致“丢失”数据,重新启动windows服务只会导致它在离开的地方重新开始工作,我需要系统非常容易进行故障排除,这就是我不使用MSMQ的原因

因此,我提出了两种解决方案中的一种——要么:

  • 我将包含处理数据的文本文件放入一个放置目录,windows服务等待文件更改通知,然后处理并删除该文件

  • 我在本地MS SQL数据库的一个特殊表中插入数据,windows服务轮询数据库中的更改/新项目,然后在处理这些更改/新项目时删除它们
MSSQL数据库在系统上是本地的,而不是通过网络,但稍后我可能想将其移动到其他服务器


从性能(或其他角度)来看,哪一个是更好的解决方案?

从性能角度来看,文件系统很可能是最快的—可能是最大幅度的

但是,还有其他因素需要考虑。

  • 一般来说,速度有多快并不重要,重要的是速度是否足够快。存储和检索小blob是一项简单的任务,很可能这永远不会成为您的瓶颈
  • NTFS是日志记录的,但只记录元数据。如果服务器在写入过程中崩溃,则文件可能包含胡言乱语。如果使用文件系统后端,则需要对文件中的任意数据具有鲁棒性。根据缓存层和文件系统重用旧空间的方式,这种胡言乱语可能包含其他消息的片段,因此即使旧消息被重复,您也最好保持健壮
  • 如果您想要添加涉及更丰富的消息模型的新特性,则数据库更容易扩展(例如,某种缓存层)
  • 文件系统更“开放”——这意味着使用真正简单的工具(记事本)进行调试可能更容易,但您可能会遇到更棘手的问题,如本地索引服务、病毒扫描程序、权限设置不当,或者系统上发生的任何其他问题
  • 大多数API无法处理路径超过260个字符的文件,并且在面对大量文件时性能不佳。如果您的存储目录变得太大,则
    .GetFiles()
    之类的操作将变得很慢,而DB可以在时间戳上建立索引,并且可以检索最新的消息,而不考虑旧的混乱情况。你可以解决这个问题,但这是一个额外的障碍
  • MS SQL不是免费的,也不是每个系统上都安装的。每台新服务器都需要一点额外的系统管理,使用时需要更多的补丁。特别是如果您的软件可以由第三方轻松安装,那么文件系统具有优势

我不知道你的建筑是什么,但是不要过早地优化。这两种解决方案在性能方面非常相似,这可能无关紧要——因此选择最简单的解决方案。如果性能确实是一个问题,那么直接通信(无论是通过IPC、IP还是其他方式)的性能将提高几个数量级,因此不要浪费时间进行微优化。

从性能角度看,文件系统很可能是最快的—可能是最大幅度的

但是,还有其他因素需要考虑。

  • 一般来说,速度有多快并不重要,重要的是速度是否足够快。存储和检索小blob是一项简单的任务,很可能这永远不会成为您的瓶颈
  • NTFS是日志记录的,但只记录元数据。如果服务器在写入过程中崩溃,则文件可能包含胡言乱语。如果使用文件系统后端,则需要对文件中的任意数据具有鲁棒性。根据缓存层和文件系统重用旧空间的方式,这种胡言乱语可能包含其他消息的片段,因此即使旧消息被重复,您也最好保持健壮
  • 如果您想要添加涉及更丰富的消息模型的新特性,则数据库更容易扩展(例如,某种缓存层)
  • 文件系统更“开放”——这意味着使用真正简单的工具(记事本)进行调试可能更容易,但您可能会遇到更棘手的问题,如本地索引服务、病毒扫描程序、权限设置不当,或者系统上发生的任何其他问题
  • 大多数API无法处理路径超过260个字符的文件,并且在面对大量文件时性能不佳。如果您的存储目录变得太大,则
    .GetFiles()
    之类的操作将变得很慢,而DB可以在时间戳上建立索引,并且可以检索最新的消息,而不考虑旧的混乱情况。你可以解决这个问题,但这是一个额外的障碍
  • MS SQL不是免费的,也不是每个系统上都安装的。每台新服务器都需要一点额外的系统管理,使用时需要更多的补丁。特别是如果您的软件可以由第三方轻松安装,那么文件系统具有优势

我不知道你的建筑是什么,但是不要过早地优化。这两种解决方案在性能方面非常相似,这可能无关紧要——因此选择最简单的解决方案。如果性能确实是一个问题,那么直接通信(无论是通过IPC、IP还是其他方式)的性能将提高几个数量级,因此不要浪费时间进行微优化。

我对2005年及更低版本的经验是,数据库的速度要慢得多
尤其是大文件。。在执行表扫描时,这确实会弄乱SQL server内存

然而
新的