|
|
本帖最后由 yulihua49 于 2021-1-14 10:59 编辑
newkid 发表于 2021-1-13 23:00
先来说说这个“大规模插入操作”。如果数据本来就在库里面,那么INSERT...SELECT是最佳。ETL的T操作有时候 ...
“如果数据本来就在库里面,那么INSERT...SELECT是最佳。ETL的T操作有时候会有很复杂的逻辑,那么这个SELECT可就大显身手了,可以连接,可以聚合(GROUP BY),可以并行跑,可以直接路径加载,等等。”
一般是,但是我用的架构可以超越这个性能:
采用BULKselect,分组(每组1000),分发到多个服务器,每个服务器多核多线程。进行计算,结果insert或update。多线程批量并行。性能超过select......insert........, 即使后者不进行任何计算。性能也超越sqlldr。
“如果数据是在库外面,比如说文本文件,但是文件能上传到数据库服务器,那么就可以定义外部表,把文件当作表来访问,INSERT...SELECT继续大显身手。”
这个方案当年试过,太慢。团队所有方案都测试过,才选用了我的方案。
“如果文件在客户端,那么用ORACLE提供的SQL LOADER,也是OCI接口,成熟又强大,不需要自己写代码。”
这个也一直在用。但是一个场合,需要在加载前先处理一下,就不得不用OCI了。
http://www.itpub.net/thread-1738533-1-1.html
|
|