自动编码器输出的数据库设计

Database design for autoencoder output

我有一个图像数据集,我是 运行 一个自动编码器,用于将它们编码为长度为 32 的浮点向量。要存储这些浮点值,我应该创建 32 个命名列还是直接将其放入在文本的 BLOB 中并在需要时解析此文本?使用前者与后者的性能优势是什么?

数据示例:

key:72
value:[1.8609547680625838e-8,2.9573993032272483e-8,0.9999995231628418,0.03153182193636894,
       0.000003173188815708272,0.9999996423721313,0.8707512617111206,0.00005991563375573605,
       0.9999498128890991,0.9999982118606567,0.947956383228302,0.9749470353126526,
       0.9999994039535522,5.490094281412894e-7,0.9999681711196899,0.9958689212799072]

我总是会检索给定图像 ID 的所有值。

表没有性能。 查询 有性能。您必须考虑使数据库存储提供最佳性能的任何考虑,必须在您将 运行 对数据进行何种类型的查询的上下文中进行。

  • 如果您始终将完整的值数组作为单个实体进行查询,则使用 blob。

  • 如果你总是查询数组中第 N 个位置的特定值,那么也许一系列列是好的。

  • 如果您想使用 SQL 对数据进行 MIN()、MAX()、AVG() 等聚合查询,则使用 table 进行第二个 table每行浮点值。

在您知道需要查询的内容之前,您无法做出此决定运行。

通常您会使用 mapping table 来映射哪些值属于哪个向量。

但是由于您提供的 array 是一个值、一个向量的全部,并且因为使用 mapping table 可能需要为每个向量向 table 添加 32 行最好将其保存为 TEXT/BLOB.