解析8GB文本文件的最快方法是什么?蟒蛇的表现会与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。
答案 0 :(得分:4)
解析性能几乎肯定与此完全无关。我希望贡献是这样的:
按顺序,每个子弹之间很可能有一个数量级的差异,这取决于数据库是否是本地的(以及网络的速度等)和磁盘类型(如果它是一个SSD将是一个很快)。
我希望Python和C#都可以这样做,假设它们都有适合你所使用的数据库的相当高效的数据库驱动程序 - 使用你会发现哪种语言更容易维护。
请注意,虽然您当然可以利用某些并行性,但如果网络最终成为瓶颈,那么它可能不会产生很大的差异。批处理数据库写入可能更重要 - 这是你应该试验的一点,IMO。
答案 1 :(得分: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
性能限制很可能是您的数据库写入/插入速度。
如果你正在使用mysql,你可以使用“insert delayed”来加速插入过程,因为这将调度查询并立即返回。
您还可以在执行插入时禁用索引(如果不需要primary / unique),这也可以加快db插入性能。
如果您正在进行更新,请确保您的查阅列已编入索引。
在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#的内存占用开销优势。您应该尝试两者并报告。