-3

解析 8GB 文本文件的最快方法是什么?Python 的性能会与 c# 相媲美吗?

exampledomain NS ns.anameserver.com.
exampledomain NS ns2.anameserver.com.
exampledomain NS ns3.anameserver.com.
anotherdomain NS ns1.nameservers.com.
cooldomain NS ns.example.com.
cooldomain NS ns2.example.com.

我需要解析每一行并使用每行的第一项和第三项更新数据库表,忽略每行中的 NS。

4

2 回答 2

4

解析性能几乎肯定在这里完全无关紧要。我希望这些贡献是这样的:

  • 用于写入数据的数据库访问
  • 用于读取数据的磁盘访问
  • 用于解析的 CPU

按这个顺序,每个子弹之间很可能有一个数量级的差异,这取决于数据库是否是本地的(以及网络的速度等)和磁盘类型(如果它是 SSD 会快得多) .

我希望 Python 和 C# 都能很好地做到这一点,假设它们都有相当高效的数据库驱动程序,用于您正在与之交谈的任何数据库 - 使用您会发现更容易维护的任何语言。

请注意,虽然您当然可以利用一些并行性,但如果网络最终成为瓶颈,它可能不会产生太大影响。批处理数据库写入可能更重要 - 这是您应该尝试的一点,IMO。

于 2013-04-04T19:53:06.817 回答
1

像这样的东西会起作用:

ins = open( "file.txt", "r" )
for line in ins:
    linesplit = line.split(" ")
    # linesplit should contain your 3 elements which you can then insert into your db
  • 如果您需要先修剪线条,您可以使用 trim

性能限制很可能是您的数据库写入/插入速度。

如果您使用的是 mysql,则可以使用“插入延迟”来加快插入过程,因为这将分派查询并立即返回。

您还可以在插入时禁用索引(如果不需要主/唯一),这也应该加快数据库插入性能。

如果您正在进行更新,请确保您的查找列已编入索引。

在c#中会是这样的

using System;
using System.IO;

class Program {
    static void Main() {
        StreamReader sr = new StreamReader("file.txt");
        while ((line = sr.ReadLine()) != null) {
             string[] linesplit = line.Split(' ');
             // linesplit has your elements, do your db stuff
        }
    }
}

我想这两种语言之间的性能实际上是相同的,并且内存占用开销优于 c#。您应该同时尝试并报告。

于 2013-04-04T20:15:30.737 回答