针对“视频帧”的MySQL Blob与磁盘

时间:2011-03-01 21:55:18

标签: mysql filesystems blob

我有一个c ++应用程序,每秒生成6x相对较小的类似图像的整数数组。数据是64x48x2维int(即,64x48二维向量的网格,每个向量由两个浮点组成)。这可以达到每张图像约26kb。该应用程序还会生成时间戳和一些描述数据的功能。我想在每帧的MySQL数据库列中存储时间戳和功能。我还需要将原始数组存储为二进制数据,可以存储在光盘上的文件中,也可以存储在数据库中的blob字段中。假设应用程序将或多或少地不间断地运行,并且我将提出一种方法来存档早于特定年龄的数据,因此存储不会成为问题。

这里有什么权衡blob,光盘上文件或其他我可能没想过的方法?我不需要查询二进制数据,但我需要查询表中的其他元数据/功能(我肯定会有一个针对时间戳构建的索引),并检索二进制数据。如果我在磁盘上的单个文件中存储多个帧,而每个文件只有一个帧,那么等式是否会改变?

是的,我已阅读MySQL Binary Storage using BLOB VS OS File System: large files, large quantities, large problemsTo Do or Not to Do: Store Images in a Database,但我认为我的问题有所不同,因为在这种情况下,将会有数百万个相同尺寸的二进制文件。我不确定维护文件系统中的许多小文件与在db blob列中存储那么多文件相比,性能如何。任何观点都将不胜感激。

1 个答案:

答案 0 :(得分:2)

在某个时刻,查询许多blob变得无法忍受地缓慢。我怀疑即使你的相同尺寸的二进制文件也是如此。此外,您仍然需要一些代码来访问和处理blob。而这并没有利用文件缓存来直接从文件系统加速图像查询。

但是!您提供的链接未提及基于对象的数据库,该数据库可以以您可以非常快速地访问它的方式存储您描述的数据,并可能以原生格式返回。有关讨论,请参阅链接或只搜索谷歌,有很多讨论:

Storing images in NoSQL stores

我也会研究HBase。

我认为既然你不确定首先要使用什么(并且没有答案),那么替代解决方案可能是合适的。