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

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

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

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

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

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

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

相关·内容

关于图片或者文件在数据库的存储方式归纳

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

9.7K20

等保测评2.0:Oracle安全审计

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

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

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

    10.2K52

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

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

    50210

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

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

    11110

    你可能会忽视的 MySQL 细节

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

    52230

    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.8K60

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

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

    83030

    47 张图带你 MySQL 进阶!!!

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

    90040

    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都将在文件系统中创建新的文件来保存最新的修改文件内容,修改或删除数据后文件系统中的文件将保留,而不会被同时删除。

    66130

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

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

    85920

    PDO操作大数据对象

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

    73320

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

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

    2K20

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

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

    1.1K30

    老码眼中的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 将修改应用回来。

    60620

    操作BLOB类型字段

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

    2.2K20

    被吐槽 GitHub仓 库太大,直接 600M 瘦身到 6M,这下舒服了

    为什么会这么大呢?在Git系统中,.git目录中存储了整个代码仓库的元数据信息(包括提交历史记录、分支、标签等)和文件对象。...当文件发生变化时,Git 会自动计算并存储新的 Blob 对象,并将其与先前的 Blob 对象做比较,以确定文件的变化情况。...图片4、删除大文件使用--delete-files命令逐一的将大文件删除,如果提示分支是被保护的可以加上--no-blob-protection命令执行。...图片每次提交都会生成一次快照,这些快照可能包含大量的文件和代码,频繁提交会导致版本库中快照的数量增加。Git使用的是一种增量存储方式,每次提交只存储发生了变化的文件和代码。...但是,如果频繁提交的变化较小,比如只是修改了几个字符或者行末空格,Git可能无法正确地检测出这些变化,而将整个文件都存储起来,也会增加了.git文件的大小。

    1.1K30
    领券