首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果我可以将文件路径保存在数据库中,而将实际文件保存在存储中,为什么还要使用Blob?

如果可以将文件路径保存在数据库中,而将实际文件保存在存储中,为什么还要使用Blob?

Blob(Binary Large Object)是一种数据库中用于存储大型二进制数据的数据类型。尽管可以将文件路径保存在数据库中,但使用Blob仍然有以下几个优势和应用场景:

  1. 数据一致性:将文件路径保存在数据库中,可能会导致数据不一致的问题。当文件被移动、重命名或删除时,数据库中的文件路径将不再有效,导致数据的不一致性。而使用Blob,可以将实际文件直接存储在数据库中,确保数据的一致性。
  2. 数据安全性:将文件保存在存储中,可以提高数据的安全性。通过对存储进行访问控制和权限管理,可以限制对文件的访问,并确保只有授权用户可以获取文件内容。而如果直接将文件路径保存在数据库中,可能会导致文件被非授权用户访问的安全风险。
  3. 数据备份和恢复:使用Blob可以方便地进行数据备份和恢复。数据库备份时,可以将包含Blob数据的数据库文件一并备份,确保文件的完整性和一致性。而如果只保存文件路径,需要额外备份存储中的文件,增加了备份和恢复的复杂性。
  4. 数据查询和处理效率:将文件保存在数据库中,可以更方便地进行数据查询和处理。通过使用数据库的查询语言,可以直接对Blob数据进行搜索、过滤和分析,而无需额外的文件系统操作。而如果只保存文件路径,需要额外的文件系统操作来获取和处理文件内容,增加了系统的复杂性和开销。

综上所述,尽管可以将文件路径保存在数据库中,但使用Blob仍然具有数据一致性、数据安全性、数据备份和恢复、数据查询和处理效率等优势。在实际应用中,可以根据具体需求和场景选择合适的存储方式。对于小型文件或对数据一致性要求不高的场景,保存文件路径可能是一种简单的解决方案。而对于大型文件、对数据安全性和一致性要求较高的场景,使用Blob更为可靠和高效。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

图片怎么存储数据库里「建议收藏」

存储图片到数据库里一般有两种方式 图片保存路径存储数据库文件存放在服务器的路径或者ftp服务器的路径图片以二进制数据流的形式直接写入数据库字段(base64的形式),base64 图片在数据库存储用途一般为...比如mysql中有个blob字段。oracle数据库blob或bfile类型 图片存储磁盘上(服务器上),数据库字段中保存的是图片在服务器上存储路径。...但是,我们用得更多的是存储图片的路径实际图片是磁盘上保存的(图片二进制放到数据库,把数据库的负担弄重了)。需要代码的话,可以看我nodejs里面对图片的处理。...页面需要取出图片路径展示图片的时候,如果是相对路径,则可以使用”./”+”images/2012/09/25/1343287394783.jpg”进行组装。...有些是不需要在数据库保存的,缩略图可以实时访问的时候用程序生成(节省很多存储空间) 实际上,把域名保存在数据库,非常不利于系统迁移。

9.8K52

测评2.0:Oracle安全审计

对于Windows而言,可以事件查看器的应用程序中进行查看。 对于Linux而言,要查看audit_file_dest参数,得知存储文件路径: ?...审计记录的保护 其实在Oracle官方文档,就建议用户审计记录存储于操作系统的文件。 因为如果存储,dba用户可以随意删除其中的记录。...如果存储文件,则查询该文件的权限设置,是否不允许操作系统数据库用户(比如oracle用户)进行修改。...如果存储文件,同样也是这个方法。 或者对方使用了软件、备份一体机等,也是要查看策略以及实际备份的文件是否存在。...这条要求里;至于设备,由于其自身存储的能力有限,如果没有日志服务器集中存储,日志保存六个月难度比较大,而恰恰2级并没有集中存储的要求,因此,在这一版的《指引》暂不明确要求,测评时可以根据实际情况进行判断

7.2K10
  • 关于图片或者文件数据库存储方式归纳

    oracle数据库blob或bfile类型 2、  图片存储磁盘上,数据库字段中保存的是图片的路径。...其实,从来没用过在数据库以二进制存储图片的做法。我们用得更多的是存储图片的路径实际图片是磁盘上保存的(图片二进制放到数据库,把数据库的负担弄重了)。...经常使用text字段去存储。文章的内容就属于大字段。一般文章内容可以拆分到单独一个表中去。不要与文章信息存储一张表里面。 理解的原理是:mysql中一张表的数据是全部一个数据文件的。...页面需要取出图片路径展示图片的时候,如果是相对路径,则可以使用”./”+”images/2012/09/25/1343287394783.jpg”进行组装。...有些是不需要在数据库保存的,缩略图可以实时访问的时候用程序生成(节省很多存储空间) 实际上,把域名保存在数据库,非常不利于系统迁移。

    9.6K20

    【建议收藏】MySQL 三万字精华总结 + 面试100 问(一)

    和其它数据库相比,MySQL有点与众不同,它的架构可以多种不同场景应用并发挥良好作用。...不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取 存储层:第四层为数据存储层,主要是数据存储在运行于该设备的文件系统之上,并完成与存储引擎的交互 ❝ 画出 MySQL...使用哪一种引擎可以灵活选择,一个数据库多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能 。...InnoDB 现在是 MySQL 默认的存储引擎,支持事务、行级锁定和外键 文件存储结构对比 MySQL建立任何一张数据表,在其数据目录对应的数据库目录下都有对应表的.frm 文件,.frm 文件是用来保存每个数据表的元数据...InnoDB count(*) 语句是执行的时候,全表扫描统计总数量,所以当数据越来越大时,语句就越来越耗时了,为什么 InnoDB 引擎不像 MyISAM 引擎一样,总行数存储到磁盘上?

    49710

    【重学 MySQL】五十九、二进制字符串类型与 JSON 类型

    但在实际工作,往往不会在MySQL数据库使用BLOB类型直接存储这些大对象数据,而是文件存储到服务器的磁盘上,并将文件的访问路径存储到MySQL。...使用BLOB和TEXT字段类型时,需要注意以下几点以优化数据库性能: 执行大量的删除或更新操作后,可能会留下很多空洞。...例如,使用SELECT *查询可能不是最佳选择,除非能确定WHERE子句只会找到所需的数据行。 可以考虑BLOB或TEXT列分离到单独的表,以减少主表的碎片并提升性能。...查询操作:可以使用JSON_EXTRACT()函数从JSON文档中提取指定路径的元素。...修改操作:可以使用 JSON_INSERT() 函数指定位置插入新值(仅当该位置不存在值时才插入),也可以使用其他JSON函数进行更新和删除操作。

    8210

    你可能会忽视的 MySQL 细节

    默认情况下,如果创建表不指定存储引擎,会使用默认的存储引擎,如果要修改默认的存储引擎,那么就可以参数文件设置 default-table-type,能够查看当前的存储引擎 show variables...奇怪,为什么没有了呢?网上求证一下, 5.5.3 取消了这个参数 可以通过下面两种方法查询当前数据库支持的存储引擎 show engines \g ?...MEMORY:MEMORY 存储引擎所有数据保存在内存需要快速定位下能够提供及其迅速的访问。MEMORY 通常用于更新不太频繁的小表,用于快速访问取得结果。...' 'cxuan' 6个字节 可以看到,如果使用 varchar 的话,那么存储的字节根据实际的值进行存储。...DATE 用于表示年月日,如果实际应用值需要保存年月日的话就可以使用 DATE。 TIME 用于表示时分秒,如果实际应用值需要保存时分秒的话就可以使用 TIME。

    51830

    Android面试题大全

    Android内存溢出内存泄露 跨进程通讯的几种方式 Android为什么子线程不能更新UI 如果不做这个校验,是不是可以正常在子线程更新UI 但是google为什么要这样去设计呢 ViewRootImp...为什么还需要开启消息循坏 使用子线程更新UI有实际应用场景吗 Android程序运行时权限与文件系统权限的区别 Android进程与线程 进程 前台进程 可见进程 服务进程(service进程) 后台进程...的数据存储 使用SharedPreferences存储数据 文件存储数据 SQLite数据库存储数据 使用ContentProvider存储数据 网络存储数据 Android六大布局 Activity(...则会抛出异常 如果不做这个校验,是不是可以正常在子线程更新UI // 如果不做这个校验,是不是可以正常在子线程更新UI?...使用SharedPreferences存储数据 它是Android提供的用来存储一些简单配置信息的一种机制,采用了XML格式数据存储到设备

    1.3K50

    DBbrain诊断日 | 这个匪夷所思的数据库故障,你会处理吗?

    VARCHAR(N) ①存储限制 • varchar 字段是实际内容单独存储聚簇索引之外,内容开头用1~2个字节表示实际长度(长度超过255时需要2个字节),最大内容长度不能超过65533。...VARCHAR、TEXT、BLOB ①VARCHAR,BLOB和TEXT类型是变长类型,对于其存储需求取决于列值的实际长度,而不是取决于类型的最大可能尺寸。...④BLOB可以储存图片(能保存可变数量的数据的二进制的大对象),TEXT只能储存纯文本文件。 ⑤BLOB值的排序和比较是大小写敏感的方式执行, TEXT值是大小写不敏感的。...这个实例的版本是5.6的,测试结果跟网上科普的知识产生了出入,varchar声明了10个字符长度,为什么中文值存储了3个,让我们看一下产生的warning是什么: ?...=3bytes • gbk字符集:  1character=2bytes 看到这里,相信大家对于为什么varchar(10)只能存在3个汉字的情况有一些思路了吧,对,这肯定跟表的字符集有关,那么我们把表的字符集改成

    1.4K10

    Java进阶笔记——MySql的varchar类型

    1.varchar类型的变化 MySQL 数据库的varchar类型4.1以下的版本的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定)。...或BLOB格式存放的数据可以使用可变长的varchar来存放,这样就能有效的减少数据库文 件的大小。...存储限制 varchar 字段是实际内容单独存储聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。...VARCHAR类型的实际长度是它的值的实际长度+1。为什么"+1"呢?这一个字节用于保存实际使用了多大的长度。...4个BLOB类型TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB仅仅在他们能保存值的最大长度方面有所不同。 BLOB 可以储存图片,TEXT不行,TEXT只能储存纯文本文件

    2.3K30

    MySQL存放文件的策略与表设计实践

    软件开发过程,我们经常需要处理和存储文件。通常情况下,我们会将文件保存在文件系统,并在数据库保存文件路径。...我们可以根据实际需求选择适当的BLOB变种。为了方便管理,我们通常还会在表包含一些其他字段,如文件名、文件类型、文件大小和上传时间等。 2....根据实际需求,也可以选择其他BLOB变种。 upload_time字段记录文件的上传时间,默认值是当前时间。 3. 优缺点分析 存储文件MySQL中有其优势和劣势。...优势: 一致性:文件和其他数据一起存储同一个数据库可以保证数据的一致性。 简化备份和恢复:所有数据都在一个地方,备份和恢复会更简单。...最佳实践 虽然文件存储MySQL是可行的,但通常我们推荐文件存储文件系统或对象存储服务(如Amazon S3或阿里云OSS),并在数据库存储文件的元数据和路径

    1.6K60

    PDO操作大数据对象

    所以,我们使用数据库时,很少会向数据库存储很大的内容字段。但是,MySQL 其实也为我们准备了这种类型的存储,只是我们平常用得不多而已。...我们没有绑定字段,然后直接 fopen() 打开的文件存储blob 字段。...我们这些文件以二进制流的方式读取到程序后,再将它们保存在数据库的字段。想想我们平常开发用到的最多的图片保存可以用这个来做。...但是,此处可以划重点了,我们更加推荐的还是文件直接保存在文件目录,而数据库保存它们的路径可以了。...当然,如果有某些特殊的需要,比如一些私密文件不想直接在硬盘文件目录中保存,或者做为临时的跨服务器存储方案都是可以的。

    73020

    独家 | 10个数据科学家常犯的编程错误(附解决方案)

    以下是经常看到的10大常见错误,本文将为你相关解决方案: 不共享代码引用的数据 对无法访问的路径进行硬编码 代码与数据混合 Git中和源码一起提交数据 编写函数而不是DAG 写for循环 不编写单元测试...://github.com/d6t/ d6tpipe)来共享你的代码的数据文件、将其上传到S3/web/google驱动等,或者保存数据库,以便于别人可以检索到文件(但是不要将其添加到git,原因见下文...代码与数据混合 既然数据科学的代码包含数据,为什么不把它们放到同一目录?那样你还可以在其中保存图像、报告和其他垃圾。哎呀,真是一团糟!...尝试共享数据时,很容易数据文件添加到版本控制。当文件很小时是可以的,但是git并没有针对数据进行优化,尤其是大文件。...git add data.csv 解决方案:使用第1点提到的工具来存储和共享数据。如果你真的希望对数据进行版本控制,请参阅 d6tpipe,DVC和Git大文件存储

    85420

    收藏 | 10个数据科学家常犯的编程错误(附解决方案)

    以下是经常看到的10大常见错误,本文将为你相关解决方案: 不共享代码引用的数据 对无法访问的路径进行硬编码 代码与数据混合 Git中和源码一起提交数据 编写函数而不是DAG 写for循环 不编写单元测试...://github.com/d6t/ d6tpipe)来共享你的代码的数据文件、将其上传到S3/web/google驱动等,或者保存数据库,以便于别人可以检索到文件(但是不要将其添加到git,原因见下文...代码与数据混合 既然数据科学的代码包含数据,为什么不把它们放到同一目录?那样你还可以在其中保存图像、报告和其他垃圾。哎呀,真是一团糟!...尝试共享数据时,很容易数据文件添加到版本控制。当文件很小时是可以的,但是git并没有针对数据进行优化,尤其是大文件。...git add data.csv 解决方案:使用第1点提到的工具来存储和共享数据。如果你真的希望对数据进行版本控制,请参阅 d6tpipe,DVC和Git大文件存储

    82130

    操作BLOB类型字段

    操作BLOB类型字段 前言 在上一章节,我们使用PreparedStatement实现CRUD操作,那么CRUD的操作,对于一些特别的数据库字段操作,会有一些特别的处理。...MySQL BLOB类型 MySQLBLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。...MySQL的四种BLOB类型(除了存储的最大信息量上不同外,他们是等同的) 实际使用根据需要存入的数据大小定义不同的BLOB类型。 需要注意的是:如果存储文件过大,数据库的性能会下降。...准备数据以及图片 准备访问 customer 的表,可以看到存在 photo 字段,如下: 项目中准备一个图片,准备下面操作: 3....类型的字段下载下来,以文件的方式保存在本地 Blob photo = resultSet.getBlob("photo"); //获取二进制数据流

    2.2K20

    从大厂不允许使用 SELECT * 说开去

    作为开发人员数据库查询语句我们经常用到,但是你是否想过为什么大厂都会强制开发人员禁止使用 SELECT * 语句?你一定会说因为效率低啊,多差除了一些无用的数据。如果是这么想的,那就继续听我来说。...接着查询数据量很大的情况下还会增加网络开销和数据传输时长,这时如果存在日志内容字段或者二进制字段的情况下,数据传输的量将以几何倍数增长,不管数据库和应用程序是否位于同一台服务器(或集群),都会感觉到明显的卡顿... MySQL 的数据库引擎是 InnoDB 的情况下,遇到这种大文本/超大文本类型字段的情况会将超过 728 字节的数据序列化到另一个地方存储,每次读取相对应的记录的时候就会增加一次操作步骤。...2.1 单例索引 我们的数据库存在一张表 emp,表包含 id,name,sex,birthday 字段,其中 id 是主键,sex 存在索引。...这时磁盘上就存在两个 B+ 树,一棵是主键索引树(聚集索引)整行内容,另一棵是 sex 索引树(辅助索引)保存 id 和 sex内容。

    1.1K30

    47 张图带你 MySQL 进阶!!!

    默认情况下,如果创建表不指定存储引擎,会使用默认的存储引擎,如果要修改默认的存储引擎,那么就可以参数文件设置 default-table-type,能够查看当前的存储引擎 show variables...MEMORY:MEMORY 存储引擎所有数据保存在内存需要快速定位下能够提供及其迅速的访问。MEMORY 通常用于更新不太频繁的小表,用于快速访问取得结果。...' 'cxuan' 6个字节 可以看到,如果使用 varchar 的话,那么存储的字节根据实际的值进行存储。...DATE 用于表示年月日,如果实际应用值需要保存年月日的话就可以使用 DATE。 TIME 用于表示时分秒,如果实际应用值需要保存时分秒的话就可以使用 TIME。...什么是视图 视图的英文名称是 view,它是一种虚拟存在的表。视图对于用户来说是透明的,它并不在数据库实际存在,视图是使用数据库行和列动态组成的表,那么视图相对于数据库表来说,优势体现在哪里?

    89640

    YYCache 源码解析(二):磁盘缓存的设计与缓存组件设计思路

    :都是讲data存在文件里,元数据放在数据库里面。...而且也想不出如果只有文件形式的缓存的话,其元数据如何保存如果有读者知道的话,麻烦告知一下,非常感谢了~~ 本文暂时对于上面提到的”文件+数据库的形式”在下文统一说成文件缓存了。...即是说,如果缓存数据的长度大于这个值,就使用文件存储如果小于这个值,就是用sqlite存储。...]; } } 从上面的代码可以看出,底层写入缓存的方法是_dbSaveWithKey:value:fileName:extendedData:,这个方法使用了两次: 文件(和数据库存储缓存时...选择合适的数据结构 YYMemoryCache,作者选择了双向链表来保存这些缓存节点。那么可以思考一下,为什么要用双向链表而不是单向链表或是数组呢?

    2K20

    php sql filestream,FileStream应用

    大家好,又见面了,是你们的朋友全栈君。 FileStream:文件流,为了解决大对象BLOB(Binary Large Objects)的存储问题.对于大对象存储,并且不受2GB的限制....以往有两种方式: (1)存储数据库里面,这种方式一般使用image字段,或者varbinary(max)来做,好处是可以统一备份,但实际效率较低; (2)存储文件系 FileStream:文件流,为了解决大对象...以往有两种方式: (1)存储数据库里面,这种方式一般使用image字段,或者varbinary(max)来做,好处是可以统一备份,但实际效率较低; (2)存储文件系统,而数据库存储文件路径,这种方式数据库压力减轻了...SQL SERVER 2008新引入的文件流就是两者的统一.文件还是放在文件系统,但由数据库进行管理,可以统一备份和还原. 如何使用FileStream?...值得注意的是:无论是插入数据还是修改数据,SQL Server都将在文件系统创建新的文件保存最新的修改文件内容,修改或删除数据后文件系统文件保留,而不会被同时删除。

    65630

    老曹眼中的Git

    快照 例如: 一个工程中有两个文件A和B, 有3个版本: V1.0 A和B,V1.5 A1和B,V2.0 A1和B1 Git 的实际存储实际存了3个快照 4个文件。...提交时 Git 会使用暂存区的这些信息生成 Tree 对象,也就是项目快照,永久保存数据库文件的状态可以分为两类。一类是暂存区与本地仓库比较得出的状态,另一类是工作区与暂存区比较得出的状态。....Git/HEAD 文件,它保存了当前的分支。 ? 分支指向了一次提交,也是 Git 的分支为什么这么轻量的原因。...每当修改的文件加入到暂存区,Git 都会根据文件的内容计算出 SHA-1,并将内容转换成 Blob,写入数据库。然后使用 SHA-1 值更新该列表文件项。...Stash 工作区与暂存区的内容做一个提交,保存起来,然后使用Reset Hard 选项恢复工作区与暂存区内容。我们可以随时使用 Stash Apply 修改应用回来。

    55030

    老码眼中的Git

    快照 例如: 一个工程中有两个文件A和B, 有3个版本: V1.0 A和B,V1.5 A1和B,V2.0 A1和B1 Git 的实际存储实际存了3个快照 4个文件。...提交时 Git 会使用暂存区的这些信息生成 Tree 对象,也就是项目快照,永久保存数据库文件的状态可以分为两类。一类是暂存区与本地仓库比较得出的状态,另一类是工作区与暂存区比较得出的状态。....Git/HEAD 文件,它保存了当前的分支。 ? 分支指向了一次提交,也是 Git 的分支为什么这么轻量的原因。...每当修改的文件加入到暂存区,Git 都会根据文件的内容计算出 SHA-1,并将内容转换成 Blob,写入数据库。然后使用 SHA-1 值更新该列表文件项。...Stash 工作区与暂存区的内容做一个提交,保存起来,然后使用Reset Hard 选项恢复工作区与暂存区内容。我们可以随时使用 Stash Apply 修改应用回来。

    60420
    领券