当前位置: 首页 > 面试题库 >

存储长二进制(原始数据)字符串

施雅懿
2023-03-14
问题内容

我们正在捕获大小可变(从100k到800k)的原始二进制字符串,并且我们想存储这些单独的字符串。它们不需要索引(duh),并且不会对该字段的内容进行任何查询。

这些插件的数量将非常大(用于存档),例如每天10,000。像这样的大型二进制字符串的最佳字段类型是什么?应该是text还是blob其他?


问题答案:

PostgreSQL 而言,类型text是不可能的。与目标相比,它更慢,占用更多空间并且更容易出错bytea
基本上有3种方法:

  1. 使用类型 bytea (基本上与SQL blob类型的pg等效)

  2. 使用“ 大物件

  3. 将blob作为文件存储在文件 系统中, 而仅将文件名存储在数据库中。

每个都有自己的优点和缺点。

  1. 非常易于处理,但是需要最多的磁盘空间。需要一些解码和编码,这也使它变慢。备份的大小迅速增加!

  2. 在处理方面有些尴尬,但是您有自己的基础结构来处理blob-如果需要的话。而且,您可以更轻松地进行单独的备份。

  3. 是迄今为止最快的方法,占用的磁盘空间最少。但是它不提供在数据库内部存储时获得的参照完整性。

我有许多类似于图像文件的实现:将一个 小缩略图
存储在bytea字段中,以实现参考完整性和快速参考。将原始图像作为文件存储在文件系统中。当然,您需要考虑何时以及如何删除过时的文件,如何备份外部文件等。



 类似资料:
  • 当我使用不同的编译器编译这段代码并在十六进制编辑器中检查输出时,我希望在某个地方找到字符串“南希”。 > 输出为,我看不到找到"Nancy"任何地方。 在visual studio(MSVC 1929)中编译相同的代码时,我在十六进制编辑器中看到了完整的字符串: 为什么我在(1)中的字符串中间得到一些随机字节?

  • 我有一个包含编码protobuf数据的coredump,我想解码这个数据并查看内容。我有.proto文件,它在原始协议缓冲区中定义了此消息。我的proto文件如下所示: 和协议版本: 我尝试了以下方法: > 从内核转储原始数据 传给protoc

  • 我们平时使用的数字都是由 0~9 共十个数字组成的,例如 1、9、10、297、952 等,一个数字最多能表示九,如果要表示十、十一、二十九、一百等,就需要多个数字组合起来。 例如表示 5+8 的结果,一个数字不够,只能”进位“,用 13 来表示;这时”进一位“相当于十,”进两位“相当于二十。 因为逢十进一,也因为只有 0~9 共十个数字,所以叫做十进制(Decimalism)。 进制也就是进位制

  • 本文向大家介绍php保存二进制原始数据为图片的程序代码,包括了php保存二进制原始数据为图片的程序代码的使用技巧和注意事项,需要的朋友参考一下 得到post过来的二进制原始数据,选择一个生成路径及图片的名字,之后写入,思路很显而易见

  • 问题内容: 我需要将大量的二进制数据存储到文件中,但是我还想以XML格式读取/写入该文件的标头。 是的,我可以将二进制数据存储到一些XML值中,并使用base64编码对其进行序列化。 但这不会节省空间。 是否可以以某种或多或少的标准化方式“混合” XML数据和原始二进制数据? 我在考虑两种选择: 有没有办法使用JAXB做到这一点? 还是有办法获取现有的XML数据并向其附加二进制数据,从而可以识别边

  • 我如何将一个写为二进制的字符串转换为二进制(字节数组)? 如果我有一个字符串: 下面是当我将二进制设置为字节数组时发生的情况(字节数组返回48,这是ASCII) 我不擅长解释,所以希望上面的例子足以告诉你我想要什么。