gpt4 book ai didi

mysql - 基本数据库设计和复杂性

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

我正在设计一个系统,该系统具有用于存储用户和与用户相关的信息的数据库。更具体地说,表中的每个用户的信息都很少。类似名称、密码、uid

然后每个用户都有零个或多个容器,我最初这样做的方法是在数据库中创建第二个表,其中包含容器并有一个引用拥有它的用户的字段。所以像containerName, content, owner 这样的东西。

因此,对来自容器的数据的查询看起来像这样:

SELECT content
FROM containers
WHERE (containerName='someContainer' AND owner='someOwner');

我的问题是这是否是一种好方法,我在考虑可扩展性,即我们有成千上万的用户,每个用户有 5 个容器(但是每个用户可能有不同数量的容器,但 5 个可能是一个典型)。我担心的是,当我在一个查询中可能想要的 5*1000 个条目中有 5 个条目时,搜索数据库会变得很慢。 (我们通常可能只需要查询中特定容器的内容,并且我们正在查看数据库,基本上有 4995 个条目的开销,对吗?如果我订阅了 100 万用户会发生什么,它会变成一个巨大的表,它只是直觉上觉得这是个坏主意。

我的第二个想法是每个用户都有表,但是这也不是一个很好的解决方案,因为这会给我数据库中的 1000 个表(也是凭直觉)糟糕的做法。

如果您能帮助我理解如何设计它,我们将不胜感激,我希望一切都清晰易懂。

最佳答案

可接受的处理方式是在 owner 字段上创建一个 INDEX。这样,MySQL 针对 owner = 'some value' 条件优化了查询。

另请参阅:http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

您说 1000 个表不可扩展是对的。一旦你开始达到几百万条记录,你可能会考虑进行分片(根据用户属性将记录拆分到几个位置)......但到那时你已经相当成功了我认为;-)

关于mysql - 基本数据库设计和复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10648606/

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