gpt4 book ai didi

database-design - 商业Web应用--可伸缩数据库设计

转载 作者:行者123 更新时间:2023-11-29 02:07:50 24 4
gpt4 key购买 nike

我正在设计一组网络应用程序来跟踪科学实验室数据。每个实验室都有几个成员,每个成员都将访问自己的数据和整个实验室的数据。因此,许多典型的查询将预期返回多个成员的记录(例如我的鼠标、乔的鼠标和莎莉的鼠标)。

我认为我的数据库已经相当规范化了。我现在想知道如何确保用户可以有效地访问他们自己的数据和他们实验室的数据集,当它们混合在(希望)来自其他实验室的大量记录中时。

到目前为止,我得出的结论是,大多数表将以两个字段结尾:user_id 和 labgroup_id。任何 SELECT 语句的 WHERE 子句将包含对其中一个 id 字段的适当引用(“...WHERE 'labroup_id=n...”或“...WHERE user_id=n...”)。

我的问题是:

  1. 这是一种可以扩展到 10^6 或更多记录的方法吗?

  2. 如果是这样,在查询中使用这些字段的最佳方式是什么,以便最有效地搜索数据库的相关子集?例如查询的第一步应该是创建一个仅包含实验室组数据的临时表吗?或者,在这种规模下,使用 id、user_id 和 labroup_id 字段的某种组合进行索引是否足够?

在此先感谢所有回复者。

最佳答案

在 10^6 行中使用这种方法应该会更好。我们目前使用的混合客户数据非常相似,由 10^8 行的帐户 ID 区分,并且在适度的硬件上完全没有性能问题。

确保您定义了涵盖 user_id 和 labgroup_id 的索引。

请记住,MySQL 每次查询只能使用一个键。查看您的典型查询模式。如果人们将在 where 子句中使用多个列,则构建复合键,其中包括频繁使用的列,这些列也提供良好的区分(意味着帮助缩小行的范围......是/否列是一个糟糕的键,但具有许多不同值的列在 where 子句中经常使用可能是一个很好的候选者)。

启用 MySQL 慢速查询日志(或获取商业查询分析器或其 30 天试用版)并查看哪些查询花费了很长时间。使用 EXPLAIN 命令找出正在使用的索引以及使用方式。如果特定查询频繁出现在慢速查询日志中和/或执行时间非常长,请考虑修改索引或添加新索引。

确保您已针对您的环境正确调整了 my.cnf。开箱即用的配置几乎总是很差。这是一个 good guide对此。

关于database-design - 商业Web应用--可伸缩数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2828491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com