表拆分更有效吗?

时间:2014-07-17 16:00:47

标签: sql

我正在开发一个使用SQL数据库并从用户那里收集大量信息的项目(大约20个用户!)。在分析数据时会有更多的时间效率:

  1. 将数据分成每个用户的表格。
  2. 在一个表格中包含所有数据。
  3. 重要说明:数据库必须是SQL,并且按用户进行搜索,没有其他条件。此外,每个用户的数据大约是1TB。 什么更有效 - 20个1TB表,或一个20TB表?

3 个答案:

答案 0 :(得分:2)

通常在提出此类问题时,答案很简单。将数据存储在单个表中是最佳选择。但是,通常用户不是在谈论每个用户的 TB级数据。即使每个用户有几千兆字节或几十千兆字节的数据,一个表也是更容易的路径。

问题是您打算如何分析数据。如果您一次分析一个用户,那么单独的表就可以了。您可以将数据存储在一个表中。如果是这样,我建议您查看“分区”,以便每个用户都可以进入自己的数据存储。

管理甚至20个表可能会很痛苦 - 如果为性能添加一个索引,则必须多次重复该过程19次。另一方面,能够备份和恢复一个用户的数据可能是有益的。事实证明,垂直分区可以合理地解决这两个问题。

在不知道您打算如何进行分析或您正在使用的数据库的情况下,我的偏见将是针对垂直分区的单个表,每个用户有一个分区。

答案 1 :(得分:0)

20是少量用户。此外,我发现很难相信你有20TB的数据。假设你最终有1000个用户。 1000张桌子将很快变得无法管理。

RDBMS(B +树等)中使用的数据结构针对大量数据进行了优化。它继续扩大规模。使用索引作为用户ID和1个表。

如果唯一的查找值是用户ID,还要考虑nosql类型数据库(mongodb)。

答案 2 :(得分:0)

这取决于很多因素。通常,没有办法回答这样的问题。你应该真正创建数据库,用测试数据填充它并进行一些性能测试(即运行几个标准查询)以查看事物的速度。

大多数时候,你会发现大多数操作都足够快,但是一些奇怪的角落案件会让你死亡。

一般来说,当您将所有数据放入单个表中时,数据库服务器必须跳过其他用户的行。跳过19TB数据是您可能会注意到的,但这取决于数据库服务器如何在内部组织数据,行数有多大以及大约999个其他因素。

也就是说,如果您不打算按列查询数据(“按用户搜索而不是其他条件”),则将其转储到SQL数据库可能是错误的设计。硬盘上的普通文件(即每个用户一个文件)听起来是一个更好的解决方案 - 除非你省略了一些重要的事实。

注意:“我的老板告诉我”这不是事实。