前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php sql filestream,FileStream应用

php sql filestream,FileStream应用

作者头像
全栈程序员站长
发布2022-09-15 10:11:59
6450
发布2022-09-15 10:11:59
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

FileStream:文件流,为了解决大对象BLOB(Binary Large Objects)的存储问题.对于大对象存储,并且不受2GB的限制. 以往有两种方式: (1)存储在数据库里面,这种方式一般使用image字段,或者varbinary(max)来做,好处是可以统一备份,但实际效率较低; (2)存储在文件系

FileStream:文件流,为了解决大对象BLOB(Binary Large Objects)的存储问题.对于大对象存储,并且不受2GB的限制.

以往有两种方式:

(1)存储在数据库里面,这种方式一般使用image字段,或者varbinary(max)来做,好处是可以统一备份,但实际效率较低;

(2)存储在文件系统,而数据库中存储文件路径,这种方式数据库压力减轻了,但却不方便统一备份和管理.

SQL SERVER 2008新引入的文件流就是两者的统一.文件还是放在文件系统,但由数据库进行管理,可以统一备份和还原.

如何使用FileStream?

一.启用FileStream

(1)在SQL Server配置管理器中打开SQL Server数据库引擎的属性窗口.

(2)切换到FILESTREAM选项卡,选中”针对Transact-SQL访问启用FILESTREAM”,其他选项是针对windows进行读写的,都可以选中.

(3)打开SSMS连接到数据库实例(是实例,不是具体的数据库),右击数据库实例,选择”属性”选项,切换到”高级”选项页,在文件流访问级别下拉列表框中选择”已启用完全访问”

二.初始化环境

(1)添加文件组

ALTER DATABASE [DBName] ADD FILEGROUP [FileGrp1] CONTAINS FILESTREAM

(2)添加存放文件的路径

ALTER DATABASE [DBName] ADD FILE(Name=N’filestream’,FILENAME=N’C:/FileStream’) TO FILEGROUP [FileGrp1]

系统将自动创建C:/FileStream文件夹并在其中写入filestream.hdr文件,该文件是 FILESTREAM容器的头文件不能删除,一定要确保在运行该语句之前C:/FileStream并不存在。

注意:文件组必须定义在NTFS格式分区下的磁盘,并且需要指向本地文件系统位置上,不允许指向网络地址network addressable storage (NAS),除非通过 iSCSI将NAS设备设置为本地NFS卷

原文(the DBA must define a database filegroup that ties an NTFS file system location to a SQL Server database. Note that the filegroup needs to point to a local file system location; filestreams can’t live on a remote server or a network addressable storage (NAS) devices unless the NAS device is presented as a local NFS volume via iSCSI)

如数据库之前从未备份过,在执行以上语句时会提示须先备份LOG

三.模拟测试

(1)建表

CREATE TABLE FileStreamTest

(

ID uniqueidentifier ROWGUID NOT NULL UNIQUE DEFAULT NewID(),

FilesName varbinary(max) FILESTREAM NULL

)

FILESTREAM_ON [FileGrp1] –指示存储到哪一个文件流

*如果一个表要使用文件流,则必须有一个GUID列,且作为唯一键列

(2)测试数据

INSERT INTO FileStreamTest(FilesName) VALUES (CAST(‘Edwin.Koo’ AS varbinary(max)))

UPDATE FileStreamTest Set FilesName= (select txt_data From OPEMROWSET( BULK ‘C:/temp/file01.txt’,SINGLE_CLOB) As F(txt_data)) WHERE ID=’BDBF1376-5CFA-43D7-B906-4B7C8E9A7625′

对于T-SQL访问FileStream数据列是完全透明的,就如访问varbinary(max)的方式一样.

值得注意的是:无论是插入数据还是修改数据,SQL Server都将在文件系统中创建新的文件来保存最新的修改文件内容,修改或删除数据后文件系统中的文件将保留,而不会被同时删除。

ALTER DATABASE [DBName] ADD FILEGROUP [FileGrp1] CONTAINS FILESTREAM

ALTER DATABASE [DBName] ADD FILE(Name=N’filestream’,FILENAME=N’C:/FileStream’) TO FILEGROUP [FileGrp1]

CREATE TABLE FileStreamTest

(

ID uniqueidentifier ROWGUID NOT NULL UNIQUE DEFAULT NewID(),

FilesName varbinary(max) FILESTREAM NULL

)

FILESTREAM_ON [FileGrp1] –指示存储到哪一个文件流

INSERT INTO FileStreamTest(FilesName) VALUES (CAST(‘Edwin.Koo’ AS varbinary(max)))

UPDATE FileStreamTest Set FilesName= (select txt_data From OPEMROWSET( BULK ‘C:/temp/file01.txt’,SINGLE_CLOB) As F(txt_data)) WHERE ID=’BDBF1376-5CFA-43D7-B906-4B7C8E9A7625′

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/162847.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档