我们有很多旧的遗留 Perl 脚本,它们连接到 MS SQL 数据库处理一些记录,并制作文件。随着时间的推移,每日交易规模不断增长,这些脚本变得越来越昂贵。
此外,数据库随着越来越多的表而增长,修改旧的 Perl 脚本很麻烦。正在考虑重做 .NET 下的一些主要脚本(在 C# 中)
在运行 Windows Server 的机器下使用一个与另一个相比有速度优势吗?
这个想法又是
执行查询
通过一些基本格式处理结果
将结果写入文件
我们有很多旧的遗留 Perl 脚本,它们连接到 MS SQL 数据库处理一些记录,并制作文件。随着时间的推移,每日交易规模不断增长,这些脚本变得越来越昂贵。
此外,数据库随着越来越多的表而增长,修改旧的 Perl 脚本很麻烦。正在考虑重做 .NET 下的一些主要脚本(在 C# 中)
在运行 Windows Server 的机器下使用一个与另一个相比有速度优势吗?
这个想法又是
执行查询
通过一些基本格式处理结果
将结果写入文件
取决于各自的程序员有多愚蠢。正确初始化后,它们都应该很舒服地使您在磁盘系统上投入的任何带宽都饱和-这是您的瓶颈。进行大型缓存写入(.NET BufferedStream)并确保您有 SSD 或快速准备好的东西。正确编程的性能瓶颈是此类工作的磁盘子系统。
这两项任务都可以用任何一种语言以同样快的速度完成。它们也可能在两种语言中都做得非常错误并且非常缓慢,因此需要考虑这一点。
从您的另一条评论中,您提到您在 SQL 服务器端进行格式化。如果您在应用程序端这样做,这些查询可能会便宜很多,然后将此脚本移动到更快的机器上,以便对数据库服务器的影响最小。
我猜硬盘速度是你现在最大的问题。您应该在运行此脚本时监控资源——它是否会耗尽您的 CPU?是不是读/写了很多记忆?(不应该)。它是否大部分时间都在等待磁盘 i/o?如果是,您应该考虑将存储升级到更快的磁盘、raid 或 ssd,具体取决于哪种情况最适合您的情况。
即使只是对磁盘进行碎片整理之类的事情也可能会有所帮助。
如果您有足够的 cpu/内存可用但无法避免慢速磁盘,您甚至可以考虑在写入之前压缩内存中的所有输出(再次,假设这是一个好主意,这实际上取决于这些报告的去向以及需要什么格式)。
在写入性能方面,我预计这些语言之间不会有很大差异(通常瓶颈是硬盘,而不是 CPU 的处理能力)。您应该看一下“维护代码的成本”,在 C# 中您可以获得更干净的代码,更不用说与 MS SQL 的集成可能会更有效,更不用说您可以使用线程。
更好的代码,更易于维护,也许更快。是的 C# 是个好主意