3

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

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

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

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

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

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

任何有助于理解如何设计它都将不胜感激,我希望一切都清晰易懂。

4

2 回答 2

0

INDEX处理此问题的公认方法是在owner现场创建一个。这样,MySQL 优化了owner = 'some value'条件查询。

另见:http ://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

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

于 2012-05-18T07:44:57.573 回答
0

如果是RBMS(如Oracle/MySQL)数据库,可以对经常查询的列创建索引,优化表的遍历和查询。为 PRIMARY 和(可选) FOREIGN 键自动创建索引。

于 2012-05-18T07:46:34.170 回答