【发布时间】:2015-04-09 07:44:53
【问题描述】:
我们正在构建一个分析引擎,该引擎必须存储每个用户的属性偏好分数。我们预计有 400 个属性,它们可能会改变(频率未知)。我们计划将其存储在 Redshift 中。
我的问题是:
我们是否应该将每个用户存储为 1 行和 400 列(每个属性 1 列) 还是我们应该选择像这样的表结构 (uid, 属性 id, 属性值, 偏好分数) 这将是 (20-400) 行乘 3 列 哪种存储会在 Redshift 中带来更好的性能。
真的应该为此考虑 NoSQL 吗?
注意: 1.这是一个实时应用程序的后端,用户越来越多。 2. 处理时,上表必须读取一个用户所有属性的全部信息,即在运行时间接创建一个 1*400 矩阵。
请帮助我哪种设计最适合这种用例。谢谢
【问题讨论】:
-
我不知道redshift,但是在普通的sql数据库中,最好有更多的小表而不是一个大表。最好创建更多更小的逻辑表。比如地址、个人信息等。
-
但是一张表应该有更多的列或更多的行..哪种设计更好读起来更快?
-
根据我使用 oracleSql 的经验,当行数超过 100 000 时,我有很长时间加载更多行。另一方面,当您尝试这样的操作时,很多列都是问题
select * from tbl.或者您想插入或更新表。在设计中的更多行上,数据的可读性也存在问题。 -
对不起,我无法理解你的意思。你能详细说明一下吗?
-
好的,我试试:行数多:
select * from tbl如果行数 > 100 000 则需要几分钟。数据的可读性要低得多。例如,对于每个用户,您都有 400 行的 uid、属性 id、属性值、偏好分数。当您尝试使用这些数据时,会非常困难。大量列:这意味着糟糕的数据库设计。此表中的每次插入或更新都会很慢,select * from tbl也会很慢。
标签: mysql database amazon-redshift nosql