如何存储配置文件?

5

我正在创建一个模块化系统,其中每个模块都是独立的。 我想将模块配置数据存储在数据库中,但不知道最佳结构是什么。

我有一些变体:

第1个:

key_____|______value (primary key is `key`)
option1 | 1
option2 | abcd
option3 | bla-bla-bla

我可以轻松获取设置,但如果我想更新一些设置,就需要使用复杂的SQL查询语句和CASE语句:

UPDATE settings SET value = CASE
WHEN key = option1 THEN 1;
WHEN key = option2 THEN abcd;
…
END
WHERE key IN (option1, option2, …)

如果有更好的方法可以在一个查询中更新多行数据(我只使用MySQLi和InnoDB),那将是非常棒的。
第二个问题:
module_____|_____settings
news       | a:3:{s:7:"option1";i:1;s:7:"option2";s:4:"abcd";s:7:"option3";s:11:"bla-bla-bla";}

我将使用一个包含设置的数组进行序列化,并将其放入数据库中。我希望将未序列化的数据缓存到.php文件中。 但是,如果我的设置数组很大,那么我的序列化字符串将非常非常大。

第三点:

option1 | option2 | option3
   1    |   abcd  |bla-bla-bla

我会为每个选项键创建一列,但我认为创建一个表来存储一行是不必要的。
哪种方法最好? 你能提出自己存储配置的方法吗? 谢谢!
1个回答

2
如果您决定将配置数据存储在数据库中,我建议您选择选项一。
这样可以轻松添加和更新配置值,而不会影响系统的其他部分。您只需稍微考虑一下更新值的复杂性。与其试图将所有内容都包装在单个更新中,不如为每个键编写单独的更新:
update settings set value = 1 where key = option1;
update settings set value = 'abcd' where key = option2;

第二个选项可能是紧随其后的选择,但我真的很讨厌在数据库中存储一个大的序列化数据字符串。如果你要这样做,考虑只将其存储在配置文件中。

我曾经参与过使用第三个选项的项目,它是我最不喜欢的。每次添加/删除配置值时都必须添加/删除列,非常麻烦。


谢谢你的回答!我认为第一种变体是最好的,但如果您需要更新多个设置,该怎么办?我读到使用“CASE”参数的SQL查询很慢,但我不想为数据库执行多个查询。 - user0103
@DarkNeo - 我更新了我的答案,并提供了一个例子。只是觉得你对更新有点过于深思熟虑了。 - Justin Niessner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接