【问题标题】:what's more efficient, SQL or flat file access?什么更有效,SQL 或平面文件访问?
【发布时间】:2010-07-22 07:32:37
【问题描述】:

我正在考虑升级一个实时程序 ASP.NET C#,它获取非常频繁更新的数据并将其从一个数据库移动到另一个数据库。

当前使用的是中间人应用程序,该应用程序使用 SqlBulkCopy 从一个中提取并插入到另一个中。

让源数据库服务器编写一个平面文件并让中间人从该平面文件中收集更好吗?

还是sql触发器? 还是 DTS?

任何建议都会很棒!

谢谢

【问题讨论】:

  • 不理解 ASP.NET 和 real-time 同一句话!
  • 非常频繁,例如每毫秒,每秒,每分钟,.. ?平面文件永远不会是答案。触发器是“最快的”(最低延迟)。您需要什么延迟?
  • 当前应用每60秒访问一次sql。

标签: c# asp.net sql


【解决方案1】:

这实际上取决于您传递的数据量以及您正在进行的转换量(如果有的话)。 DTS/SSIS 是您列出的最具可扩展性和功能最丰富的选项。

您期望什么样的负载?你在做复杂的转换吗?如果您有使用 SSIS 的资源,我建议您使用它,因为它可以随心所欲地扩展。

【讨论】:

  • 理想情况下,我也会使用 DTS /SSIS - 特别是如果数据库是 SQL Server。这主要是因为根据我的经验,随着时间的推移,围绕数据传输的逻辑可能会变得复杂,而 SSIS 就是为此目的而构建的。
  • 我移动大约 250 行,10 列,主要是 varchars 和 datetime - 每 60 秒。你认为SSIS? - 我会调查的。谢谢!
  • 在这种情况下,对于这么小的数字,我只需编写一个 SQL 查询来完成这项工作,然后每 60 秒将其作为 SQL 作业运行一次。
【解决方案2】:

对平面文件的读写效率更高。但是如果你想使用索引搜索和其他 SQL 功能,最好使用 SQL。

【讨论】:

  • 一个平面文件?那根本不可能有什么好处,不是吗?锁定问题怎么办?为什么在整个情况都在问题范围内(即他完全控制)时将其写入磁盘然后必须再次读取它?它如何更有效?
  • 目前没有索引或sql功能。从字面上收集 x 行 x 周期,然后转储到新服务器上。如果 SQL 服务器可以使用存储过程写入平面文件 - 那么我可以在新盒子上收集和转储?
  • 我认为您应该提供更多信息。收集 x 周期意味着索引使用情况。为什么在平面文件的情况下需要 SQL 过程?
  • @Kieren:在我从事的一个项目中,我们必须每分钟在一个表格中插入几千行。我们尝试了几种方法来做到这一点:在数据库中写入每一行,将所有行收集到缓存中,然后发出一个包含所有值的大插入,或者将值写入一个平面文件,然后在一个 SQL 命令中导入 csv。最后一个使用平面文件的速度方式快(在我们的例子中快两倍以上)。还有其他问题,例如表的大小、索引的数量等,但在每种情况下插入平面文件都更快。尝试使用 MySQL 和 PostgreSQL。
  • 我想我忘记了一些 DBMS 可以直接从 CSV 文件等中读取 - 非常好!我收回评论的震惊!
【解决方案3】:

据我所知,使用 SQL Server 可以使用三种不同的“标准”方式:

  • Replication。通常用于通过发布者和订阅者保持跨数据库的表同步。
  • SSIS(以前的 DTS)。可以通过计划作业实现自动化。
  • Service Broker。新来的孩子。

这些方法中的任何一个都可能比写入平面文件并读取它的性能更好,但唯一可以确定(在您的环境中)测试和计时不同方法的方法。

【讨论】:

    【解决方案4】:

    您考虑过SQL Server Replication 还是SSIS

    【讨论】:

    • 认为是,调查得当没有。感谢您的提示,我今天将研究这些技术。
    【解决方案5】:

    如果您喜欢编写 C# 而不喜欢 SSIS。您可以查看Rhino ETL 作为替代方案。 我发现它的执行速度非常快。

    平面文件似乎没有必要,因为您在不需要时重新写入磁盘。

    【讨论】:

      猜你喜欢
      • 2010-11-29
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      相关资源
      最近更新 更多