【问题标题】:BLOB's in SQL that stores a Video file存储视频文件的 SQL 中的 BLOB
【发布时间】:2011-11-29 05:07:48
【问题描述】:

我希望有人可以解释如何使用 BLOB。我看到 BLOB 可以用来存储视频文件。我的问题是为什么人们会将视频文件存储在 SQL 数据库中的 BLOB 中?与存储指向视频文件位置的指针相比有哪些优缺点?

【问题讨论】:

    标签: sql oracle blob


    【解决方案1】:

    几个不同的原因。

    如果您在磁盘上存储指向文件的指针(可能使用BFILE 数据类型),您必须确保在磁盘上移动、重命名或删除文件时更新您的数据库。当您像这样存储数据时,随着时间的推移,您的数据库与文件系统不同步,最终导致链接断开和孤立的内容,这是相对常见的。

    如果您在磁盘上存储指向文件的指针,则在处理多媒体时不能使用事务语义。由于您无法执行诸如针对文件系统发出回滚之类的操作,因此您要么必须处理这样一个事实,即您将遇到文件系统上的数据与数据库中的数据不匹配的情况(即有人将视频上传到文件系统,但在数据库中创建作者和标题的事务失败,反之亦然)或者您必须在文件上传中添加额外步骤以模拟事务语义(即上传第二个 _done.txt仅包含实际上传文件中的字节数的文件。这很麻烦且容易出错,并且可能会产生可用性问题。

    对于许多应用程序,让数据库提供数据是向用户提供数据的最简单方法。如果您想避免向用户提供文件的直接 FTP URL,因为他们可以使用它来绕过某些应用程序级别的安全性,最简单的选择是拥有一个数据库支持的应用程序来检索数据,数据库从中读取数据文件系统,然后将其返回到中间层,然后中间层将数据发送给客户端。如果每次检索数据时都必须将数据读入数据库,那么直接将数据存储在数据库中并让数据库在用户询问时从其数据文件中读取数据通常更有意义为它。

    最后,像 Oracle 这样的数据库提供了额外的实用程序来处理数据库中的多媒体数据。例如,Oracle interMedia 提供了一组丰富的对象来与存储在数据库中的视频数据进行交互——您可以轻松标记场景开始或结束的位置、讨论各种主题的位置、录制视频的时间、录制者等。您可以将该搜索功能与针对所有关系数据的搜索集成。当然,您可以在数据库之上编写一个应用程序来完成所有这些事情,但是您要么编写大量代码,要么在应用程序中使用另一个框架。利用数据库功能通常要容易得多。

    【讨论】:

      【解决方案2】:

      阅读此内容:http://www.oracle.com/us/products/database/options/spatial/039950.pdf (显然是一个有偏见的观点,但确实有一些缺点(现在已经被 11g 的出现解决了)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-23
        • 2021-07-09
        • 2020-08-12
        • 1970-01-01
        • 2011-01-25
        • 1970-01-01
        • 2020-03-26
        相关资源
        最近更新 更多