我正在使用一个webapi来调用和接收数据,从而为历史能源价格构建一个SQL数据库。在上下文中,能源价格被设定在所谓的“节点”上,每个节点都有20年的历史数据。在
我可以接收JSON或XML格式的数据。在将接收到的数据放入SQL数据库之前,我需要对其执行一个操作。也就是说,我需要将东部夏令时中给出的每小时转换回其东部标准时间当量。在
作为Python的全新用户(在过去两周内学到的),我最初走的是一条对我更直观的道路:
HTTP请求(XML格式)—>;在Python中解析为XML对象->转换日期时间->放入SQL数据库
我试图获取的数据的总大小大约是150GB。正因为如此,我希望以异步方式获取数据,并将其格式化/放入SQL,因为它来自数百个API调用(一次只能获得50000行)。我用线程池来做这个。收到数据后,我试图使用ProcessPool将这些数据转换为需要放入SQL数据库的格式,但没有成功。在
从较高的层次来看,我认为这个过程可以更有效。我想我可以做到以下几点:
HTTP请求(JSON格式)—>;在Python中解析为JSON对象->;执行转换日期时间的操作(使用字典映射值?)->;放入SQL数据库
我刚刚在Python中发现了OPENJSON库。这就是我要做的一切吗?在
我需要研究的另一个问题是SQLite3的局限性。每个节点在我的数据库中都有自己的表,所以理想情况下,我希望有尽可能多的程序实例来获取、解析并将数据放入SQLite3数据库。在
任何帮助都将不胜感激!在
有这么多未知数,你的问题没有明确的答案,但我可以概述一下如何找到答案。在
影响绩效的因素
如您所述,处理是分阶段完成的(我现在将抽象出实际的格式,原因稍后再介绍):
对于每个阶段,都有一些限制因素不允许您提高处理速度。在
对于获取数据,其中一些是:
用于分析数据:
对于数据转换:
对于数据存储:
这些并不是限制处理速度的所有因素,而是一些最明显的因素。还有一些其他未知的限制。在
此外,在阶段之间传递数据时可能会有一些开销。这取决于设计。在某些设计中(例如从远程服务器读取数据、在内存中处理数据并将其存储到数据库的单个进程)开销可能为零,但在某些设计中(多个进程读取数据并将其存储到文件中,另一组进程打开这些文件并处理它们等等),开销可能相当大。在
处理的最终速度由最慢的阶段的速度或阶段之间通过的数据的速度来定义。在
在设计解决方案或在多个设计中进行选择时,并非所有这些因素都可以预测。考虑到还有未知因素,这就更复杂了。在
接近
为了系统化,我将使用以下方法:
一般来说,当你试图优化一些东西时,你需要有一些数字,并在重新做实验。在
平行性
Python
在选择线程和进程时应该小心。例如,对于CPU密集型任务,线程是not good。查看有关此Multiprocessing vs Threading Python的详细信息
SQLite
当多个进程使用单个数据库时,SQLite可能有some limitations。你需要检查它是否是你速度的限制因素。也许您需要使用另一个更适合并行性的数据库,然后作为附加的最后一步,将数据从其中一次性转储到SQLite(这只需要按顺序读取数据并将其存储在SQLite中,如果与并行写入单个SQLite DB相比,效率可能会更高)。在
相关问题 更多 >
编程相关推荐