如果文件大小达到2GB,是否应该将数据转移到数据库中,而不是继续使用Python?
如果每次进行"微调"时都需要遍历所有行,假设实际的"微调"是在占用您的循环周期,那么这并不会有太大的区别。
也许您可以以某种方式存储计算结果,然后数据库可能会很好用。此外,数据库具有确保数据完整性等方法,因此数据库通常是存储大量数据的绝佳场所(当然啦! ;)).
存档 —— 您可以将旧日志进行存档,比如每隔几个月。将生产日志复制到归档位置并清除实时日志。这将使文件大小保持合理。如果您浪费时间访问文件以查找所需的小块内容,则此方法将解决您的问题。
您可能需要考虑转换为Java或C语言。特别是在循环和计算方面,您可能会看到30倍或更多的加速。这可能会立即缩短时间。但随着数据逐渐增加,有一天它也会变慢。如果没有数据量的限制,即使是世界上最伟大的程序员手动优化汇编代码也会变得太慢。但它可能会给您10倍的时间……
您还可以考虑找出瓶颈(是磁盘访问还是CPU时间),并根据此确定以并行方式执行此任务的方案。如果是处理,可以考虑多线程(最终是多台计算机),如果是磁盘访问,请考虑将文件分割成多个部分并分配给多台计算机……这真的取决于您的情况。但我认为存档可能会消除此处的需要。
正如建议的那样,如果您一遍又一遍地进行相同的计算,请将它们存储起来。无论您使用数据库还是文件,这都将大大加速。
如果您正在下载内容并且这是瓶颈,请考虑使用if modified请求进行条件获取。然后仅下载更改的项目。如果您只是处理新的图表,则忽略此建议。
如果您正在顺序读取巨大的日志文件,并逐行查找特定位置,则只需创建另一个文件来存储您上次处理的文件位置,然后每次运行时执行搜索。
在整个数据库之前,您可能需要考虑SQLite。
最后,“几年”在程序员时间中似乎很长。即使只有2年,很多事情都会发生变化。也许您的部门/分部将被裁员。也许您和您的老板已经离职了。也许该系统将被其他东西替换。也许不再需要您正在做的事情。如果只有6个月,我会说解决它。但对于几年,在大多数情况下,我会说现在使用您拥有的解决方案,一旦它变得太慢,再考虑其他方法。您可以在代码中发表评论,包括您对此问题的想法和给老板的电子邮件,以便他也知道。但只要它能工作并且将继续工作一段合理的时间,我会认为它已经“完成”了。无论您选择哪种解决方案,如果数据不断增长,您都需要重新考虑它。添加更多的机器、更多的磁盘空间、新的算法/系统/开发。解决“几年”的问题可能非常好。
在处理大型数据集时,我总是使用数据库。
数据库为我提供了一些免费的东西; 也就是说,我不需要编写代码。
像SQLite这样的东西可能适合你。
此外,你应该调查一下“nosql”数据库;听起来你的问题可能很适合其中之一。
在2GB的情况下,您可能会开始遇到速度问题。我使用模型模拟,需要调用数百个csv文件,每次循环大约需要一个小时,或每个循环约20分钟。
这是个人喜好的问题,但我会选择类似PostGreSql这样的东西,因为它将Python的速度与SQL驱动关系数据库的容量集成在一起。几年前,当我的Access数据库自己损坏并每天崩溃时,我也遇到了同样的问题。当时我可以选择MySQL或PostGres,最终我选择了后者,因为它更加友好于Python。并不是说MySQL不能与Python一起使用,因为它确实可以,这就是为什么我说这是个人喜好的原因。
希望这对您的决策有所帮助!