在数据库中存储大型数组

时间:2013-04-02 02:26:51

标签: php mysql arrays multidimensional-array

我正在开展一个图像处理项目。我使用php作为GUI,matlab作为算法,Mysql作为我的数据库。我现在有30,000个图像存储在数据库中。我的matlab程序将为包含300个元素的每个图像生成3个数组。所以,我的问题是

  1. 是否将matlab生成的数组保存为单个txt文件中的所有图像,或者为每个图像创建txt文件。哪种方法更容易检索数据并存储到数据库中?
  2. 将数组复制到txt文件并将其保存到数据库中有多难?这有什么标准流程吗?
  3. 必须检索数组的元素以进行进一步计算。我们可以为此目的使用序列化和反序列化吗?
  4. 我必须一次比较2个数组元素,并从两个数组中获得具有最小值的第三个数组。例如A = [1 2 3 4]和B = [6 1 4 2]我必须比较这2个数组的每个元素并生成第三个数组c = [1 1 3 2],它正在比较数组的每个元素其另一个数组的相应元素,并将最小元素存储在第三个数组中。与1个固定阵列相比,该过程重复数千个阵列。有没有PHP功能呢?
  5. 任何建议和帮助都会非常值得注意。谢谢。

2 个答案:

答案 0 :(得分:1)

在这种情况下,最好的解决方案是创建一个单独的元表,用于存储与图像相关的数据(数组)。

这是一个简单的例子EER:

Image DB EER

image_id(引用外键),arrayindex的组合构成了元表的主键。

我假设您可以安全地将数组的键表示为0索引,并且数组的所有值也都是数字(这就是为什么所有字段都是INT类型的原因,但如果没有,相应地调整数据类型。)

  • image_id 代表关联的image_id。
  • array 代表特定数组(您说最多3个数组,因此此列中的值可以是1-3)。
  • index 是数组中的数字索引。
  • value 是与索引配对的数组中的值。

元表中的示例数据可能如下所示:

image_id    |    array    |    index    |    value
------------------------------------------------------
256         |    1        |    0        |    5
256         |    1        |    1        |    9
256         |    1        |    2        |    4
256         |    1        |    3        |    23
256         |    1        |    4        |    1
256         |    2        |    0        |    9
256         |    2        |    1        |    15
256         |    2        |    2        |    8
256         |    2        |    3        |    19
256         |    2        |    4        |    11

在上面的示例数据中,我们在1列中有两个数组(每个数组由2array表示),每个数组包含5个元素(在{{1}中表示的键}列和index列中显示的值。

您可以存储所需的多个阵列,但需要多个索引。

您还可以使用value在MySQL中执行所需的数组比较计算。以下是如何为image_id 256 找到所有数组中每个键的最小值(假设有3个数组):

GROUP BY

由于在(SELECT index, MIN(value) AS minvalue FROM image_meta WHERE image_id = 256 GROUP BY index image_idarray)上设置了复合索引,因此这应该非常快。

此设计还允许每个图像具有可变数量的索引和数组。

答案 1 :(得分:-1)

阅读您的问题,无论我的评论如何,关系数据库对您来说会更好,如果性能不是一个大问题,那么SQL将是最好地解决您的问题的语言,而不是PHP级别。<登记/> 是的,PHP也有解决这些问题的简单方法,尽管不像在SQL中那么容易。