我们的客户有一个在数据库中存储 blob 的应用程序,该数据库现在已经增长到足以影响 SQL Server 的性能。为了克服这个问题,我们计划将所有 blob 卸载到文件系统,并将文件路径保留在用户表的新列中。
就像用户有一个包含列 id、名称和内容 (blob) 的表 docs;我们会要求他在此表中添加一个新列“文件路径”。
我们的客户愿意在此数据库中进行此更改。但是当涉及到将 sql 查询更改为读取和写入此表时,他们还没有准备好接受这一点。实际上,他们不希望任何导致重新编译和部署的更改。
现在我们计划编写一个自定义的 ADO.NET 提供程序,它将
- 拦截选择查询
- 在选择语句的末尾添加一列“文件路径”
- 获取结果集并根据'filepath'值修改'content'列值
有没有您认为使用这种方法肯定会失败的用例?
我知道这听起来很脏,但我们有更好的方法吗?
最佳答案
您是否尝试过将列切换到 FILESTREAM
数据类型?这会执行您描述的所有操作,将数据推出 数据库(到文件系统)。当然,访问仍然需要通过服务器作为 TDS,但您可能会发现影响较小,您可以逐步更改代码以更直接地访问文件(为了提高性能)- 然而,最后一步将涉及更改查询。
关于c# - 自定义 ADO.NET 提供程序拦截和修改 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4918735/