【问题标题】:How can I efficiently update a database with external data sources?如何使用外部数据源有效地更新数据库?
【发布时间】:2009-02-09 01:45:16
【问题描述】:

我正在尝试使用来自多个数据源(即 LDAP 和其他一些 MS SQL 数据库)的信息来填充 MS SQL 数据库中的用户信息表。该流程需要作为每日定时任务运行,以保证用户信息表的频繁更新。

此查询/更新脚本的初始尝试是用 VBScript 编写的,它将查询每个数据源,然后更新用户信息表。不幸的是,这需要很长时间来运行和更新用户信息表。

我很好奇是否有人写过类似的东西,以及您是否推荐或注意到通过用另一种语言编写脚本来提高性能。有些人因为多线程而推荐 Perl,但如果有人对改进流程或其他方法有任何其他建议,您可以分享技巧或经验教训。

【问题讨论】:

    标签: sql-server database


    【解决方案1】:

    使用数据转换服务 (DTS) 或 SSIS 是一种很好的做法,因为它以执行重复性数据库任务而闻名。虽然这不能解决您的问题,但它可能会为您提供一些指示,因为您可以记录流程的每个阶段,将其包装在事务中等。它特别适合批量加载和更新,并且它理解 VBScript原生所以应该没有问题。

    除此之外,我必须同意 Brian 的看法,找出导致它变慢的原因并加以解决,更改语言不太可能自行解决,尤其是在您遇到潜在问题的情况下。一般来说,我在使用非常小的 LDAP 时的经验是,它可能是非常慢的阅读器批量用户详细信息。

    【讨论】:

      【解决方案2】:

      我无法告诉您如何解决您的特定问题,但是每当您遇到这种情况时,您都想在尝试解决它之前找出它为什么会变慢。减速在哪里?需要考虑和调查的一些主要事项包括:

      • 获取数据
      • 与网络交互
      • 查询数据库
      • 更新数据库中的索引

      获取一些时间和分析信息,以确定您的工作重点。

      【讨论】:

        【解决方案3】:

        嗯。似乎您可以 cron 使用来自各种来源的转储实用程序的脚本,然后将输出转换为目标数据库的加载实用程序的良好格式。脚本可以是 bash 或 Perl 等等。

        编辑:就性能而言,我认为您要尝试的第一件事是确保在加载过程开始时禁用任何自动提交,然后在写入所有记录后发出提交。这可以产生巨大的性能差异。

        【讨论】:

          【解决方案4】:

          正如 MrTelly 所说,使用 SSIS 或 DTS。然后安排程序包运行。仅转换为这一点可能会解决您的速度问题,因为他们有针对批量插入优化的任务。无论如何,我永远不会用脚本语言而不是 t-SQl 来做到这一点。您的脚本可能会逐行运行,而不是在数据集上运行,但这只是猜测。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-08-03
            • 1970-01-01
            • 1970-01-01
            • 2011-10-17
            • 1970-01-01
            • 2020-04-11
            • 2023-03-31
            • 1970-01-01
            相关资源
            最近更新 更多