【问题标题】:Custom ADO.NET provider to intercept and modify sql queries自定义 ADO.NET 提供程序以拦截和修改 sql 查询
【发布时间】:2011-02-07 06:51:57
【问题描述】:

我们的客户端有一个将 blob 存储在数据库中的应用程序,该应用程序现在已经增长到足以影响 SQL Server 的性能。为了解决这个问题,我们计划将所有 blob 卸载到文件系统,并将文件路径保留在用户表的新列中。

如果用户有一个表格文档,其中包含 id、name 和 content (blob) 列;我们会要求他在此表中添加一个新列“文件路径”。

我们的客户愿意在此数据库中进行此更改。但是当涉及到更改 sql 查询以读取和写入该表时,他们还没有准备好接受这一点。实际上,他们不希望进行任何导致重新编译和部署的更改。

现在我们计划编写一个自定义的 ADO.NET 提供程序,它将

  • 拦截选择查询
  • 在 select 语句的末尾添加一列“文件路径”
  • 检索结果集并根据“文件路径”值修改“内容”列值

您认为这种方法肯定会失败吗?

我知道这听起来很脏,但我们有更好的方法吗?

【问题讨论】:

    标签: c# .net ado.net


    【解决方案1】:

    您是否尝试将列切换为FILESTREAM 数据类型?这将完成您描述的所有操作,将数据库中的数据 out 推送到文件系统中。当然,访问仍然需要虽然服务器作为TDS,但您可能会发现影响较小,您可以逐步更改代码以更直接地访问文件(以提高性能)- 这最后一步涉及更改查询。

    【讨论】:

    • 客户还希望将他们的大部分非活动数据移动到云端,这也应该是非侵入式的。我们必须有一些自定义实现来管理它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多