日期:2014-05-17  浏览次数:20552 次

多媒體資料庫的疑問
在下初學資料庫  工具是MS SQL 2008 跟VB.NET 目前有一個正想開發的項目

想問問各位前輩跟先進一些概念!

我去翻閱一些資料庫的書本,書本上說目前資料庫的領域已經成長開發到多媒體資料庫的功能,跟傳統上只能處理文字資料之別

有長足的進步。 所以想問問各位有開發過類似多媒體資料庫的前輩們幾個問題,就我所知多媒體資料庫可以建圖片跟聲音的資料庫功能

在MS SQL 2008有這個功能嗎?   我是想開發建立一個聲音的資料庫,目的用於智能回話的,所以應該是我把所有的聲音檔都儲存進聲音的資料庫

然後再用LINQ去調用聲音檔這樣對嗎?  想先了解這兩個概念,也希望前輩多多提供資訊。 感激不盡!
------解决方案--------------------
在MS SQL 2008有這個功能嗎? 我是想開發建立一個聲音的資料庫,目的用於智能回話的,所以應該是我把所有的聲音檔都儲存進聲音的資料庫

--------文件大小<256K建议放在数据库,读取速度比硬盘快,太大存放路径
------解决方案--------------------
BLOB类型文件,好像没有大小限制,ORACLE里是这样的,SQL不是很清楚了。
------解决方案--------------------
2008有个叫做filestream的功能 可以去查一下

但是在图片比较大的情况下 还是建议存储图片路径  在程序中调用路径


------解决方案--------------------
这里是联机丛书中关于 filestream 的介绍:

每天创建的大部分数据(如文本文档、图像和视频)均为非结构化的数据。这类非结构化的数据通常存储在数据库之外,以便与数据库中的结构化数据分隔开来。这种分隔可能会增加数据管理的复杂程度。或者,如果数据与结构化存储相关联,则可能会限制文件流功能和性能。

通过将 varbinary(max) 二进制大型对象 (BLOB) 数据以文件形式存储在文件系统上,FILESTREAM 使 SQL Server 数据库引擎和 NTFS 文件系统成为了一个整体。Transact-SQL 语句可以插入、更新、查询、搜索和备份 FILESTREAM 数据。通过 Win32 文件系统接口可以流式方式访问数据。

FILESTREAM 使用 NT 系统缓存来缓存文件数据。这有助于减少 FILESTREAM 数据可能对数据库引擎性能产生的任何影响。由于没有使用 SQL Server 缓冲池,因此该内存可用于查询处理。

何时使用 FILESTREAM
在 SQL Server 中,BLOB 可以是将数据存储在表中的标准 varbinary(max) 数据,也可以是将数据存储在文件系统中的 FILESTREAM varbinary(max) 对象。数据的大小和应用情况决定您应该使用数据库存储还是文件系统存储。如果满足以下条件,则应考虑使用 FILESTREAM:

所存储的对象平均大于 1 MB。


快速读取访问很重要。


您开发的是使用中间层作为应用程序逻辑的应用程序。


对于较小的对象,将 varbinary(max) BLOB 存储在数据库中通常会提供更为优异的流性能。

FILESTREAM 存储
FILESTREAM 存储以 varbinary(max) 列的形式实现,在该列中数据以 BLOB 的形式存储在文件系统中。BLOB 的大小仅受文件系统容量大小的限制。文件大小为 2 GB 的 varbinary(max) 标准限制不适用于存储在文件系统中的 BLOB。

若要指定列应将数据存储在文件系统中,请对 varbinary(max) 列指定 FILESTREAM 属性。这样数据库引擎会将该列的所有数据存储在文件系统,而不是数据库文件中。

FILESTREAM 数据必须存储在 FILESTREAM 文件组中。FILESTREAM 文件组是包含文件系统目录而非文件本身的专用文件组。这些文件系统目录称为“数据容器”。数据容器是数据库引擎存储与文件系统存储之间的接口。

使用 FILESTREAM 存储时,请考虑以下内容:

如果表包含 FILESTREAM 列,则每一行都必须具有唯一的行 ID。


不能嵌套 FILESTREAM 数据容器。


使用故障转移群集时,FILESTREAM 文件组必须位于共享磁盘资源上。


FILESTREAM 文件组可位于压缩卷上。

用于访问 BLOB 数据的双编程模型
在将数据存储在 FILESTREAM 列中之后,即可通过使用 Transact-SQL 事务或 Win32 API 访问文件。

Transact-SQL 访问
可以使用 Transact-SQL 来插入、更新和删除 FILESTREAM 数据:

您可以使用插入操作用 null 值、空值或相对较短的内联数据预填充 FILESTREAM 字段。但是,大量数据将以流的方式更有效地导入到使用 Win32 接口的文件中。


更新 FILESTREAM 字段时,即会修改文件系统中的基础 BLOB 数据。将 FILESTREAM 字段设置为 NULL 即会删除与该字段相关联的 BLOB 数据。您不能使用作为 UPDATE.Write() 实现的 Transact-SQL 成块更新以对数据执行部分更新。


当删除行或者删除或截断包含 FILESTREAM 数据的表时,将会删除文件系统中的基础 BLOB 数据。


文件系统流访问
在 SQL Server 事务上下文中支持 Win32 流。在事务之内,可以使用 FILESTREAM 函数来获取文件的逻辑 UNC 文件系统路径。接着使用 OpenSqlFilestream API 来获取文件句柄。然后 Win32 文件流接口(如 ReadFile() 和 WriteFile())可使用此句柄通过文件系统访问并更新文件。

由于文件操作属于事务操作,因此您无法通过文件系统删除或重命名 FILESTREAM 文件。

语句模型
FILESTREAM 文件系统访问通过使用文件打开和关闭来构建 Transact-SQL 语句模型。当打开文件句柄时,语句开始;当关闭句柄时