首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将PDF文件从MySQL保存到C#中,而不需要在

问将PDF文件从MySQL保存到C#中,而不需要在
EN

Stack Overflow用户
提问于 2014-08-31 13:22:19
回答 4查看 1.2K关注 0票数 1

嗨,我需要传输或者我们可以说保存PDF,这是存储在BLOB类型从MySQL到甲骨文。我知道如何在byte[]中转换到它,然后在Oracle中保存它。

我的疑问是,是否还有其他选项可以避免这种转换并加快这个过程?类似于将MySQL文件保存在对象中的任何东西都可以将其直接交给Oracle查询吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-03 10:52:36

如果您想将BLOB从一个RDBMS移到另一个RDBMS,您就无法逃避这些段落,因为您的程序必须:

  1. 从源读取二进制数据
  2. 将数据写入目标

如果您需要转换lots of BLOB,则IMHO更好的方法是:

  1. 将转换步骤封装在方法中
  2. 多线程每个转换任务根据您的系统能力。
票数 3
EN

Stack Overflow用户

发布于 2014-09-09 15:44:39

甲骨文和MySQL是完全不同的系统。当您将二进制数据从一个移动到另一个数据时,您必须经历这个转换过程。

虽然MySql和ODP.Net都以流的形式访问Blobs,但是为了从一种语言中读取和写入另一种语言,您的程序需要说通用的语言,而.Net中的通用语言是byte[]。

现在,使用Oracle,您可以将文件存储为一个BFILE,它只是一个文件系统文件,而不是由关系数据库管理系统管理的文件。如果这样做,那么您只需将MySql中的所有blobs转储到回答中概述的目录中,就可以跳过从MySql中进行的字节数组转换。

然后,将BFILE添加到Oracle将是一个批处理作业,一旦完成MySql转储,您就可以运行该作业:

代码语言:javascript
复制
CREATE DIRECTORY test_dir AS '/tmp'  -- replace tmp with actual my sql dump directory 

-- Inserting the BFiles
INSERT INTO my_bfile_table VALUES (..., bfilename(test_dir, 'file1.pdf'));
INSERT INTO my_bfile_table VALUES (..., bfilename(test_dir, 'file2.pdf'));
...

请注意,ODP.Net 不让你更新 BFILE,因此您必须通过上面所示的SQL命令插入它们。不过,您可以通过JDBC和其他接口来完成它。

如果文件很大,实际上可以通过减少事务日志活动获得一些性能改进。当然还有一些与BFILE存储相关的折衷(比如降低可管理性,需要单独备份文件系统等),因此您可能需要考虑这些。

如果您有这个选项,那么研究一下这个想法--跳过将PDF全部存储在数据库中(BLOB或BFILE),将它们移动到CDN,并将一个定位器(URI)存储到数据库中的CDN资产。不仅数据库将得到很大程度的缓解,最终用户体验也可能得到改善。当然,这取决于您的应用程序及其需求,但它可能值得探索。

票数 2
EN

Stack Overflow用户

发布于 2014-09-05 14:44:05

我认为您在从byte[]读取BLOB时没有其他选项(存储在MySql中)。但是,如果您有很多记录要移动,在插入Oracle时,可以使用Oracle.DataAccess.Client.OracleBulkCopy在ODP.NET中进行性能考虑。

01/OracleBulkCopyClass.htm

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25592385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档