存储列表:在文件或MySQL中?

时间:2013-02-01 20:57:40

标签: php mysql data-storage

这是存储以下类型列表的更好方法:

array(
   'category'=>array(
      'key'=>'value',
      'key'=>'value'
    ),
   'category'=>array(
      'key'=>'value',
      'key'=>'value'
    )
);

在MySQL中存储这些列表的更有效方法是lists.php文件还是序列化条目?

3 个答案:

答案 0 :(得分:2)

很好取决于你的mysql表结构:

  • 如果您的表格是 NORMALIZED ,那么序列化数据并存储它会破坏规范化。

但除此之外,为什么不创建两个表,一个存储类别,另一个存储引用该类别的键值对。

CREATE TABLE Categories (
   CID INT,
   ***
   PRIMARY KEY (CID)
)ENGINE=InnoDB;

CREATE TABLE KeyValues (
   Category INT,
   Key varchar(100),
   Value varchar(100,
   FOREIGN KEY Category REFERENCES Categories(CID)
)ENGINE=InnoDB;

您可以根据结构进一步规范化keyvalues表。我没有故意选择主键,因为它取决于你是否正常化你的表。添加自动增量主键也可以。

选择数据更容易,更快捷。当您有序列化数据时,如果您需要进行某种计算,首先需要抓住PHP端,取消序列化并进行计算,只需一个查询即可完成同样的事情。

答案 1 :(得分:1)

我建议您使用mysql,更易于维护,并且您可以轻松挑选所需的行,而无需将整个数组加载到内存中。 您也可以尝试使用像mongoDB这样的nosql数据库。

答案 2 :(得分:0)

除非您需要,否则不要使用数据库,这会增加不必要的开销,复杂性并引入新的故障点。在这种情况下,我将列表编码为PHP源数组。它将快几个数量级,并且更容易实现 - 您可以在几秒钟内完成此代码。在这种情况下,我认为使用数据库没有任何好处。存储600个元素阵列所需的开销可以忽略不计。如果您后来发现数组变得太大而不合理,或者需要经常更改,那么您可以将其移动到数据库中。不要过度设计它。