【问题标题】:Which is the most efficient way to bulk insert to a Oracle database?哪种是批量插入 Oracle 数据库的最有效方法?
【发布时间】:2013-03-26 01:53:34
【问题描述】:

作为办公室需求的一部分,我需要编写一个 C# 控制台应用程序,该应用程序从 Oracle CRM ON Demand 服务器中提取大量数据并将其推送到本地 Oracle 数据库。

现在,经过大量研究,我决定使用 ODP.NET 的 Array Binding 功能,据我了解,它可以提供最佳性能。

但问题是,我需要提取的数据每条记录/行总共有 50 多个字段/列。所以我需要创建那么多字符串数组?

我可以使用具有 50 多列的数据表而不是字符串数组来实现相同的(数组绑定)吗?如果是这样,怎么做? (我已经对此进行了足够的研究,但找不到解决方案)我知道我可以使用 OracleBulkCopy 类,但从我在这里读到的内容来看,它效率不高,与数组绑定相比性能很差。

另外,如果我使用这么多数组,我的应用程序是否仍然有效?因为当我与同事讨论此选项时,他们声称在您的应用程序中包含这么多数组并不是一个好的设计。

在过去的几天里,上述问题一直困扰着我,谁能帮我找到解决问题的最佳方法?我需要尽快解决这个问题。

【问题讨论】:

    标签: c# performance oracle bulkinsert odp.net


    【解决方案1】:

    但问题是,我需要提取的数据每条记录/行总共有 50 多个字段/列。所以我需要创建那么多字符串数组?

    不幸的是,是的。我有完全相同的问题,我没有找到比你建议的更好的解决方案。仅当您想使用经典 ADO.NET 时,才可以选择 DataTable。

    不用担心性能问题:我的应用程序使用 Array Binding 每天插入 2000 万行,而且我没有性能或内存问题。但我同意你同事的观点,代码并不漂亮。

    【讨论】:

    • 感谢您的回复。
    • 那么,如果我要继续使用数组绑定作为我的选择,我必须采取哪些预防措施来释放数组可能占用的内存?另外,事后想一想,列表会比数组更好吗?
    • 垃圾收集器会为你释放内存,不用担心。只有当您事先不知道要插入多少行时,(链接)列表才是更好的选择:直接分配具有正确大小的数组并使用 for循环以迭代您处理的数据。
    • 好的。是的,就我而言,我不知道我将插入多少行,而且我插入的行数也会根据标准每天发生变化。
    • 如果一天要插入200万条记录,那么单批要插入多少条记录?或者 - 您是一次性插入所有记录吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 2012-08-06
    相关资源
    最近更新 更多