gpt4 book ai didi

mysql : multiple tables or one big table?

转载 作者:行者123 更新时间:2023-11-29 14:09:04 25 4
gpt4 key购买 nike

这个问题已经被问过,但我还没有找到“1 个语音答案”。

这样做更好吗:

  • 1 张大 table ,其中:

用户 ID |属性_1 |属性_2 |属性_3 |属性_4

  • 或 4 个小 table ,其中:用户 ID |属性_1

用户 ID |属性_2

用户 ID |属性_3

用户 ID |属性_4

一张大 table 还是许多小 table ?每个用户只能拥有 1 个 attribute_X 值。我们有大量数据需要保存(一亿用户)。我们正在使用innoDB。性能对我们来说非常重要(10 000 次查询/秒)。

谢谢!

弗朗索瓦

最佳答案

如果您遵循零、一个或多个原则,即没有这样的东西、其中一个或无限数量,您总是会构建适当标准化的表来跟踪诸如这个。

例如,可能的架构:

CREATE TABLE user_attributes (
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
user_id INT NOT NULL,
attribute_name VARCHAR(255) NOT NULL,
attribute_value VARCHAR(255),
UNIQUE INDEX index_user_attributes_name(user_id, attribute_name)
);

这是基本的键值存储模式,每个用户可以拥有许多个属性。

虽然这种存储要求比固定列排列更高,而且其名称总是令人沮丧,例如 attribute1,但在 TB 级硬盘驱动器时代,成本足够小,因此很少使用一个问题。

通常,您会为此数据创建一个表,直到插入时间成为问题。只要你的插入速度很快,我就不会担心。此时,您可能需要考虑一种分片策略,将此数据划分为多个具有相同架构的表,但前提是需要这样做。

我想这将是在大约 10-5000 万行阶段,但如果该表中的插入事件量相对较低,则可能会更高。

不要忘记优化读取事件的最佳方法是使用缓存:最快的数据库查询是您不进行的查询。对于这类事情,您通常会使用类似 memcached 的内容。存储先前获取的结果,并且您会在写入时使其无效。

一如既往,在生产规模上对任何提议的模式进行基准测试。

关于mysql : multiple tables or one big table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13810073/

25 4 0