每天导入 100 亿行

Cat*_*key 2 import sql-server-2012

我每天需要将 100 亿行导入数据库。

SSIS,似乎并没有削减它,我开始认为编写某种自定义 C/C++ 代码可能是一种尝试(我不太了解 C/C++)的选择。

我正在使用标准级别的制作盒,没有什么花哨但很体面。SQL 2012。

欢迎任何建议。

编辑:

源是一个平面文件。说 20 列。不确定尺寸。源数据在同一个磁盘上。(在这一刻)。

编辑 2:虽然列主要是 int/bigint,但有 5-7 个 VARCHAR(x)(最大的是 VARCHAR(1000))。

我发现 SSIS 的问题是读/写速度不是我所希望的。我尝试过 fastParse 等,以及其他各种技术。

除了技巧,我希望有技巧。小费显然仍然受欢迎。

Ant*_*rds 6

查看BCPBULK INSERT,它们都可以共享格式文件

基于纯猜测的快速数学,因为没有给出硬性细节:

13 个数字列,假设它们平均每列 6 个字节 = 13*6=78 个字节。

5 个 VARCHAR 列,根据原始问题中“最大”的 VARCHAR(1000) = 5*300 = 1500 字节,假设它们平均为 300 个字节

1500 + 78 = 每行平均 1578 个字节。

1578*10000000000/(1024*1024) = 15048981 兆字节/天

15048981/(24*60*60) = 174MB/s EACH WAY(一次从源和一次到数据库)如果你连续加载它,一天 24 小时,风雨无阻,在索引维护期间,在备份期间,在 DBCC 期间CHECKDB 和操作系统级别的磁盘碎片整理。

如果您有 7 个平均每个 800 字节的 VARCHAR 字段,那么这是 5 个平均每个 20 字节的 VARCHAR 字段的带宽要求的 40 倍;后者可以通过千兆以太网完成,前者不能每天提供 100 亿行的标准。

弄清楚你的数据大小实际上是多少,你的时间窗口实际上是什么,然后计算你需要多快才能真正实现。

如果必须,您可以尝试禁用或删除将这些数据放入的任何表上的触发器、跟踪、约束、外键、索引等。

并注意备份空间要求:)。

  • 您可能还希望并行运行多个批量插入任务。Scalzo 的 [Oracle DBA 数据仓库和星型模式指南](http://ebookee.org/Oracle-DBA-Guide-to-Data-Warehousing-and-Star-Schemas_6424.html) 讨论了在 Oracle 上执行此操作的技术及其批量加载工具 (SQL*Loader)。您可以使用可以生成多个进程的 .net 包装器执行类似操作。 (2认同)