Questions tagged «blob»

二进制大对象,数据类型

12
是否应将二进制文件存储在数据库中?
在数据库中存储与数据相关的二进制文件的最佳位置是什么?你应该: 用blob存储在数据库中 使用数据库中的链接存储在文件系统上 存储在文件系统中,但重命名为内容的哈希并将哈希存储在数据库中 我没想到的事 (1)的优点(尤其是)保留了事务的原子性。代价是您可能会大大增加存储(以及相关的流/备份)要求 (3)的目标是在某种程度上保留原子性-如果您可以强制执行写入操作,则不允许更改或删除文件,并且始终具有正确的哈希作为文件名。想法是在允许插入/更新引用哈希之前将文件写入文件系统-如果此事务在文件系统写入之后但在数据库DML之前失败,则可以,因为文件系统正在“伪造”为所有存储库可能的文件和哈希-里面是否有没有指向的文件都没关系(如果小心,可以定期清理它们) 编辑: 看起来有些RDBMS以各自的方式涵盖了这一点-我很想知道其他人是如何做到的-特别是在针对postgres的解决方案中

5
如何将数据(文件)插入PostgreSQL bytea列?
这个问题与bytea v。oid v。blobs v。大物体等无关。 我有一个包含主键integer字段和bytea字段的表。我想在该bytea字段中输入数据。据推测,这可以通过一种PL/语言来完成,PL/Python将来我可能会考虑这样做。 在仍在测试和试验中,我只想使用“标准” SQL语句从文件(服务器上)插入数据。我知道,只有在服务器上具有写权限的管理员才能以我想要的方式插入数据。我现在不担心这一点,因为用户bytea目前不会插入数据。我已经搜索了各种StackExchange网站,PostgreSQL档案库和Internet,但没有找到答案。 编辑: 这从2008年的讨论意味着什么,我想做的事情是不可能的。那么如何使用bytea字段? 编辑: 这从2005年类似的问题仍然没有答案。 解决:所提供的细节在这里上的psycopg网站,我用Python编写的解决方案提供了基础。也可以使用将二进制数据插入到bytea列中PL/Python。我不知道是否可以使用“纯” SQL。

3
为什么建议将BLOB存储在单独的SQL Server表中?
这个备受好评的SO答案建议将图像放在单独的表中,即使与另一个表只有1:1的关系: 如果您决定将图片放入SQL Server表中,我强烈建议使用一个单独的表来存储这些图片-不要将员工照片存储在employee表中-请将它们保存在单独的表中。这样,假设您并不一定总是选择雇员的照片作为查询的一部分,那么Employee表就可以保持精简,卑鄙和高效。 为什么?我的印象是,SQL Server只在表中存储一个指向某些专用BLOB数据结构的指针,所以为什么要手动创建另一个间接层呢?它真的可以显着提高性能吗?如果是,为什么?
28 sql-server  blob 

1
访问相同的LOB数据时逻辑读取不同
这是三个读取相同数据,但报告逻辑读取非常不同的简单测试: 设定 下面的脚本创建一个包含100个相同行的测试表,每个表包含一个xml列,其中包含足够的数据以确保其存储在行外。在我的测试数据库中,每行生成的xml的长度为20204字节。 -- Conditional drop IF OBJECT_ID(N'dbo.XMLTest', N'U') IS NOT NULL DROP TABLE dbo.XMLTest; GO -- Create test table CREATE TABLE dbo.XMLTest ( ID integer IDENTITY PRIMARY KEY, X xml NULL ); GO -- Add 100 wide xml rows DECLARE @X xml; SET @X = ( SELECT TOP (100) …

2
LOB_DATA,慢速表扫描和一些I / O问题
我有一个相当大的表,其中一列是XML数据,XML条目的平均大小约为15 KB。所有其他列都是常规int,bigints,GUID等。要获得一些具体数字,我们假设该表有100万行,大小约为15 GB。 我注意到的是,如果我要选择所有列,则从此表选择数据的速度确实很慢。当我做 SELECT TOP 1000 * FROM TABLE 从磁盘读取数据大约需要20-25秒-即使我没有对结果施加任何顺序。我使用冷缓存(即之后DBCC DROPCLEANBUFFERS)运行查询。以下是IO统计信息: 扫描计数1,逻辑读取364,物理读取24,预读7191,lob逻辑读7924,lob物理读1690,lob预读3968。 它捕获约15 MB的数据。执行计划按预期显示了聚集索引扫描。 除了查询外,磁盘上没有任何IO。我还检查了聚簇索引碎片是否接近0%。这是消费级的SATA驱动器,但是我仍然认为SQL Server能够以超过100-150 MB / min的速度扫描表。 XML字段的存在会导致大多数表数据位于LOB_DATA页上(实际上,约90%的表页都是LOB_DATA)。 我想我的问题是-我是否正确地认为LOB_DATA页会导致缓慢的扫描,不仅是因为它们的大小,还因为当表中有很多LOB_DATA页时,SQL Server无法有效地扫描聚集索引吗? 更广泛地讲-具有这样的表结构/数据模式是否合理?使用Filestream的建议通常会指出更大的字段大小,所以我真的不想走那条路。我还没有真正找到有关此特定情况的任何好信息。 我一直在考虑XML压缩,但是它需要在客户端或SQLCLR上完成,并且需要在系统中进行大量工作。 我尝试了压缩,并且由于XML是高度冗余的,因此我可以(在ac#应用程序中)将XML从20KB压缩到〜2.5KB并将其存储在VARBINARY列中,从而避免使用LOB数据页。在我的测试中,SELECT的速度提高了20倍。


1
PostgreSQL bytea与smallint []
我希望将大型(100Mb-1 GB)多通道时间序列数据导入PostgreSQL数据库。数据来自EDF格式文件,该文件将数据分块为通常每个几秒钟的“记录”或“纪元”。每个时期的记录将每个数据通道的信号保存为短整数的连续数组。 我被授权将文件存储在数据库中,在最坏的情况下,存储为BLOB。鉴于此,我想研究一些选项,这些选项将使我可以对数据库中的数据做更多的事情,例如,促进基于信号数据的查询。 我最初的计划是将每个纪元记录的数据存储为一行。我要权衡的是将实际信号数据存储为bytea还是smallint [](甚至是smallint [] [])类型。谁能推荐一个?我对存储和访问成本感兴趣。用法可能只插入一次,偶尔读取,就永远不会更新。如果更容易将其包装为自定义类型,以便我可以添加用于分析比较记录的函数,那就更好了。 毫无疑问,我的细节不够完善,请随时添加您要我澄清的内容的评论。

1
从varbinary(max)中清空数据后缩小DB的最佳方法?
我们有一个数据库,其中有大量数据存储在varbinary(max)类型的字段中。在某些时候,我们可以清除大多数行(但不是全部)的数据。我们的计划是使该字段可为空,并在不再需要该数据时将其清空。完成后,我们希望减少数据库的大小。做到这一点的最佳方法是什么? 如果没有一种利用当前设置回收空间的好方法,那么我的一个想法就是将数据字段移动到只有两列的单独表中:主表的键和数据字段。然后,当不再需要这些行时,我们可以简单地删除它们。(然后进行某种缩小。)但是,与简单地使现有字段可为空相比,这将是一件困难得多的更改。 注意:实际上,我不太关心使数据库文件变小,但是我关心新释放的空间变得可重用。 这一字段占数据库大小的90%以上。我已经在3TB了。

2
从文本和图像迁移到varchar(max)和varbinary(max)
我有一个包含许多image和text列的SQL Server数据库,并且我正在研究将它们迁移到未弃用的对varbinary(max)等物和时可能引起的潜在问题varchar(max)。 除了更改应用程序代码外,我主要关心的是与此相关的潜在“陷阱”。例如,旧数据类型是否支持某些功能,而新数据类型不支持这些功能? 至少由于截断而导致的数据丢失似乎不是问题,因为新类型至少与旧类型一样大。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.