如何仅显示用户已导入到表格模型的数据

时间:2019-06-14 08:22:19

标签: sql database asp.net-core azure-analysis-services

所以我面临一些体系结构问题。

我确实已经在分析服务中创建了表格模型,其中一个模型具有定价,数据等结构。

我的系统允许为用户导入包含数百万条记录的数据。但是我不知道什么是最好的结构。我必须在API端点(ASP.NET CORE)上显示用户导入的数据,而不显示其他用户的数据,所以我应该有一个新的标识列,以便知道数据是否属于当前用户吗?

也许还有更好的选择?也许将每个用户数据保留在新表和新表格模型中?

1 个答案:

答案 0 :(得分:1)

这取决于很多因素,但总的来说,添加用户ID列将成为架构上的方法。这主要是因为表格将数据存储在压缩的column store format中的方式。解释此问题的最简单方法是,一个表仅保存每个唯一值的一个副本,并带有一个字典,该字典将值链接到其余列。

因此,让我们看一下如何得出一个示例。我们将创建一个具有用户ID和一个数据列的表。因为我们在谈论如此狭窄的表,所以我将关系数据库中的一行与表格模型中的条目视为相同。

  • 100个用户
  • 每个用户
  • 50万条记录
  • 2列(用户ID和我们的数据列)
  • 我们的数据列中有1万个唯一值

在传统的关系数据库中,我们会拥有

  • 100个用户x 50万条记录= 5000万个项目(哎!)

如果我们将每个用户放入表格中的唯一表或模型中,我们将拥有

  • 100个模型(用户)x 1万个唯一值= 1百万个项目(可能少一点,因为每个用户可能没有全部10k个值)

但是,如果我们使用用户ID和数据列创建一个表,则会得到

  • 一列存储中的100个用户+另一存储中的1万个唯一值= 10,100个项目

尽管如此,表格中的各个值所占用的空间比大多数关系数据库中的空间大,但是事实是,每个值存储一个副本通常会极大地弥补这一点。

如您所见,我们要走这条路线的原因是,我们正在为每列添加可能值的数量,而不是将它们相乘。关键是要了解每列唯一值的数量。如果某个地方有开放的字符串,几乎每个值都是唯一的,那么压缩将是最小的。由于大多数要分析的数据都是基于具有有限数量唯一值的数字,日期和字符串,因此在这种类型的存储中,数据压缩得很好。由于每一列都是自己的表,因此确实增加了连接数,但是表格式在内存中运行100%的事实弥补了这一点。

希望这足以帮助您入门。如果您想了解有关如何在表格模型中高效组织数据的更多信息,建议您学习snowflake schema works的用法。特别是对于Analysis Services Tabular,Guy in a Cubesqlbi.com是不错的资源。他们的许多内容都与Power BI有关,但是Power BI数据模型只是表格立方体。他们都使用Vertipaq引擎来存储和查询数据。