数百万行的数据库设计

时间:2014-11-14 09:00:43

标签: database-design bigdata

我有一个包含用户和按钮的应用程序,每个都有一个唯一的ID。我创建了一个user_tbl和button_tbl。

当没有太多的按钮或用户一切顺利时,但什么时候会有数亿用户和按钮?用户和按钮将分布在许多表格上...... 所以我发现我必须创建多个表并将它们命名为tbl_0,tbl_1等,然后生成用户ID,当以0开头的ID存储在user_tbl_0中时,以1开头的ID将存储在user_tbl_1中,因此上。按钮也一样。

现在,查询是根据按钮或用户执行的,即有时我需要查询分配给某个BUTTON的所有USERS,有时还会查询分配给某个USER的所有BUTTONS。 我创建了一个user_buttons_tbl,其中每行包含分配给用户的用户ID和按钮ID。然后,当只有一个这样的表时,没有问题,但在某些时候我将不得不创建其他表,并根据用户ID将其命名为user_buttons_tbl_0,user_buttons_tbl_1等。

问题: 这只有在我查询某个USER的所有BUTTONS时才有帮助。在这种情况下,我可以根据用户ID从适当的表(0,1,...)进行查询,但是当我需要查询所有USERS以获取某个BUTTON时,我需要查询所有这些用户表,因为这个按钮可能让用户的ID以0,1,2等开头。

可能的解决方案: 创建button_users_tbl_0,button_users_tbl_1等(就像user_buttons_tbl一样),其中按钮ID而不是用户ID将是决定在哪个表中存储记录的关键(tbl_0,tbl_1,...)。当我需要查询所有USERS以获得某个BUTTON时,这可以为我提供服务。

这意味着当我给用户分配一个按钮时,我需要根据用户ID将记录插入到相应的user_buttons_tbl中,并根据按钮ID将记录插入到相应的button_users_tbl中,这样它就是2次了存储空间用于相同的数据。

我的问题:

  1. 如果我有除USERS和BUTTONS之外的其他数据类型怎么办?比如LINKS,每个链接都分配给某个按钮,每个链接都有一个链接ID?这使事情变得更加复杂,可能需要额外的"重复"表

  2. 也许我应该在表格上添加表格,甚至没有用0,1,2等命名它们,每次都要查询它们......这听起来不错,但我不是知道......也许就是它的完成方式。是吗?

  3. 在这里做什么是正确的?什么被认为是这种数据交叉的大数据的良好数据库设计实践?还有其他解决方案吗?

  4. 我将非常感谢你的回答,并提前感谢。

1 个答案:

答案 0 :(得分:0)

性能优化的一般规则是:

  • 不要过早优化
  • 开始前测量。

如果您正在使用SQL数据库,则应首先构建一个正确规范化的数据库模式,并在实际开始遇到性能问题时开始调整性能。这样,你实际上知道瓶颈在哪里。如果你从设计一个基于你认为的瓶颈的方式开始,并且现实结果是不同的,你将会有一个糟糕的时间。无论如何,对于设计良好的SQL数据库来说,数亿行并不是一个问题。

如果您首先不需要关系数据库的强大功能,那么您可以查看像Cassandra,CouchDB或许多其他解决方案之一的NoSql解决方案。它们在性能和可伸缩性方面享有盛誉,但它们需要更多的努力来管理您的数据。