所以我面临一些体系结构问题。
我确实已经在分析服务中创建了表格模型,其中一个模型具有定价,数据等结构。
我的系统允许为用户导入包含数百万条记录的数据。但是我不知道什么是最好的结构。我必须在API端点(ASP.NET CORE)上显示用户导入的数据,而不显示其他用户的数据,所以我应该有一个新的标识列,以便知道数据是否属于当前用户吗?
也许还有更好的选择?也许将每个用户数据保留在新表和新表格模型中?
答案 0 :(得分:1)
这取决于很多因素,但总的来说,添加用户ID列将成为架构上的方法。这主要是因为表格将数据存储在压缩的column store format中的方式。解释此问题的最简单方法是,一个表仅保存每个唯一值的一个副本,并带有一个字典,该字典将值链接到其余列。
因此,让我们看一下如何得出一个示例。我们将创建一个具有用户ID和一个数据列的表。因为我们在谈论如此狭窄的表,所以我将关系数据库中的一行与表格模型中的条目视为相同。
在传统的关系数据库中,我们会拥有
如果我们将每个用户放入表格中的唯一表或模型中,我们将拥有
但是,如果我们使用用户ID和数据列创建一个表,则会得到
尽管如此,表格中的各个值所占用的空间比大多数关系数据库中的空间大,但是事实是,每个值存储一个副本通常会极大地弥补这一点。
如您所见,我们要走这条路线的原因是,我们正在为每列添加可能值的数量,而不是将它们相乘。关键是要了解每列唯一值的数量。如果某个地方有开放的字符串,几乎每个值都是唯一的,那么压缩将是最小的。由于大多数要分析的数据都是基于具有有限数量唯一值的数字,日期和字符串,因此在这种类型的存储中,数据压缩得很好。由于每一列都是自己的表,因此确实增加了连接数,但是表格式在内存中运行100%的事实弥补了这一点。
希望这足以帮助您入门。如果您想了解有关如何在表格模型中高效组织数据的更多信息,建议您学习snowflake schema works的用法。特别是对于Analysis Services Tabular,Guy in a Cube和sqlbi.com是不错的资源。他们的许多内容都与Power BI有关,但是Power BI数据模型只是表格立方体。他们都使用Vertipaq引擎来存储和查询数据。