我有一个关于如何将数据集成到MSSQL数据库中的一般策略的问题。
目前,我在整个ETL过程中使用python。我用它来清理、转换和集成MSSQL数据库中的数据。我的数据很小,所以我认为这个过程现在工作得很好。
然而,我认为我的代码不断地读取数据和向数据库写入数据有点尴尬。我认为,当我处理大量数据时,这种策略将成为一个问题,因为恒定的读/写似乎非常低效。然而,我所知道的还不足以确定这是否是一个真正的问题。
我想知道这是一个可行的方法,还是我应该完全切换到SSIS来处理它。对我来说,SSIS是笨拙的,我不想重写我的整个代码。任何关于通用ETL体系结构的输入都将非常有帮助。
Is this practice alright?
可能?有太多的因素给出一个确切的答案。从概念上讲,你所做的——从数据源提取数据,转换数据,将其加载到目的地,ETL,就是SSIS所做的一切。它可能比python更有效地完成任务——至少我曾经花了不少时间让批量加载处理内存映射数据。转储到磁盘并通过python批量插入-没问题。但是,如果现有的流程有效,那么就让它去做,直到它不起作用为止。
如果您的团队了解Python,那么仅仅为了ETL而引入SSIS可能会比扩展现有方法带来更大的维护成本。另一方面,如果它是标准的Python +库,你在SQL Server 2017+上,你可以通过sp_execute_external_script
从数据库内部执行脚本。如果ETL进程与数据库运行在同一台机器上,那么确保您有足够的资源来支持两个进程的最大活动水平。如果ETL在其他地方运行,那么您将需要确保在数据库服务器和处理箱之间具有快速的全双工连接。
建立一个与生产资源并行的负载测试环境。假设源数据增加了10倍,然后观察ETL的表现。100 x 1000 x。在某些时候,您将确定您所犯的不可伸缩的开发错误,并且然后您准备好询问一个非常好的,详细的问题,描述当前的架构,在负载下性能不佳的特定代码以及如何复制该负载。
以上的设计考虑对Python、SSIS或任何其他ETL解决方案都适用——无论是预先打包的还是定制的。