数据模型指南,根据不断变化的过滤条件进行聚合的数据库选择
Data model guidance, database choice for aggregations on changing filter criteria
问题:
我们正在寻找有关使用什么数据库以及如何对我们的数据建模以有效查询聚合统计信息以及与特定实体相关的统计信息的指导。
我们有不同的基础数据,但这个例子应该展示基本问题:
假设您有一段时间内的 Facebook 好友请求和互动数据。您现在想回答如下问题:
- 2018年哪个美国人喜欢ACDC的德国朋友最多?
- X 与哪些朋友就话题 Y 互动最多?
普遍的问题是,对于我们要计算统计数据的实体和计算这些统计数据的相关实体,我们有很多不断变化的过滤条件(国家、主题、兴趣、时间)。
非功能性要求:
- 这是一个离线用例,意味着没有插入、删除或
发生更新,而不是每 X 周导入一个新的完整转储以替换旧数据。
- 我们希望上限为 10 秒
回答我们的问题。查询越快越好 最多 2 秒就好了。
- 实际数据在100-2亿条左右,呈线性增长。
- 系统必须为有限数量的并发用户提供服务,最多 100 个。
问题:
- 解决我们问题的正确数据库技术或技术组合是什么?
- 对于在多个维度上不断变化的过滤条件来计算聚合的有效数据模型是什么?
- (奖金)给定特定技术,估计的硬件要求是什么?
到目前为止我们尝试了什么:
- 使用非规范化条目设置文档存储。问题:它在一般查询上表现不佳,因为它必须扫描太多条目以进行聚合。
- 设置具有规范化条目的图形数据库。问题:在聚合上表现更差。
您谈到要使用哪个数据库,但听起来您需要一个 数据仓库或商业智能 解决方案,而不仅仅是一个数据库。
区别(简而言之)是数据仓库 (DW) 可以支持多个报告视图、自定义数据模型、and/or 预聚合,这些可以让您进行高级分析和详细过滤。数据仓库倾向于保存大量数据,并且通常被构建为非常可扩展和灵活(就数据的使用方式而言)。有关 DW 和数据库之间区别的更多详细信息,请查看 this article.
商业智能 (BI) 工具是数据仓库的 "lighter" 版本,其目标是极快地回答特定的数据问题,而无需大量的最终用户技术知识。 BI 工具提供了大量可视化功能(易于配置图形和过滤器)。 BI 工具通常与数据仓库一起使用:数据被建模、清理并存储在仓库内部,BI 工具将准备好的数据提取到特定的可视化或报告中。然而,许多公司(尤其是较小的公司)确实在没有数据仓库的情况下使用 BI 工具。
现在,问题是使用哪个数据仓库 and/or BI 解决方案。
这本身就是一个完整的主题,远远超出了我在这里所写内容的范围,但这里有一些流行的工具名称可以帮助您入门:Tableau、PowerBI、Domo、Snowflake、Redshift 等
最后是数据建模部分。
为了总结您的要求,您有 "lots of changing filter criteria" 和您需要的各种统计数据,用于各种实体。
DW 内部的数据模型通常使用星型、雪花型或数据保险库模式。 (网上有很多解释这些的文章。)如果您使用纯粹的 BI 工具,您可以将数据去规范化为一个组合数据集,这将允许您使用多种过滤和计算选项,同时仍然保持高性能和速度。
让我们看看你举的例子:
Data of Facebook friend requests and interactions over time. You need to answer:
In 2018 which American had the most German friends that like ACDC?
Which are the friends that person X most interacted with on topic Y?
You want to filter/re-calculate the answers to those questions based on country, topic, interests, time.
一个潜在的数据集可以像这样构造:
互动日期 |发起人国家 |回复人的国家 |话题 |交互类型 |发起人的最大兴趣 |回复者的最大兴趣
这样您就可以轻松计算互动的数量,并按这些列中的任何一列过滤 and/or 分组。
如您所知,这只是一个庞大主题的冰山一角,但您提出的问题绝对可行,希望 post 能帮助您入门。还有很多咨询公司也很乐意提供帮助。 (免责声明:我在其中一家咨询公司工作 :)
问题:
我们正在寻找有关使用什么数据库以及如何对我们的数据建模以有效查询聚合统计信息以及与特定实体相关的统计信息的指导。
我们有不同的基础数据,但这个例子应该展示基本问题:
假设您有一段时间内的 Facebook 好友请求和互动数据。您现在想回答如下问题:
- 2018年哪个美国人喜欢ACDC的德国朋友最多?
- X 与哪些朋友就话题 Y 互动最多?
普遍的问题是,对于我们要计算统计数据的实体和计算这些统计数据的相关实体,我们有很多不断变化的过滤条件(国家、主题、兴趣、时间)。
非功能性要求:
- 这是一个离线用例,意味着没有插入、删除或 发生更新,而不是每 X 周导入一个新的完整转储以替换旧数据。
- 我们希望上限为 10 秒 回答我们的问题。查询越快越好 最多 2 秒就好了。
- 实际数据在100-2亿条左右,呈线性增长。
- 系统必须为有限数量的并发用户提供服务,最多 100 个。
问题:
- 解决我们问题的正确数据库技术或技术组合是什么?
- 对于在多个维度上不断变化的过滤条件来计算聚合的有效数据模型是什么?
- (奖金)给定特定技术,估计的硬件要求是什么?
到目前为止我们尝试了什么:
- 使用非规范化条目设置文档存储。问题:它在一般查询上表现不佳,因为它必须扫描太多条目以进行聚合。
- 设置具有规范化条目的图形数据库。问题:在聚合上表现更差。
您谈到要使用哪个数据库,但听起来您需要一个 数据仓库或商业智能 解决方案,而不仅仅是一个数据库。
区别(简而言之)是数据仓库 (DW) 可以支持多个报告视图、自定义数据模型、and/or 预聚合,这些可以让您进行高级分析和详细过滤。数据仓库倾向于保存大量数据,并且通常被构建为非常可扩展和灵活(就数据的使用方式而言)。有关 DW 和数据库之间区别的更多详细信息,请查看 this article.
商业智能 (BI) 工具是数据仓库的 "lighter" 版本,其目标是极快地回答特定的数据问题,而无需大量的最终用户技术知识。 BI 工具提供了大量可视化功能(易于配置图形和过滤器)。 BI 工具通常与数据仓库一起使用:数据被建模、清理并存储在仓库内部,BI 工具将准备好的数据提取到特定的可视化或报告中。然而,许多公司(尤其是较小的公司)确实在没有数据仓库的情况下使用 BI 工具。
现在,问题是使用哪个数据仓库 and/or BI 解决方案。
这本身就是一个完整的主题,远远超出了我在这里所写内容的范围,但这里有一些流行的工具名称可以帮助您入门:Tableau、PowerBI、Domo、Snowflake、Redshift 等
最后是数据建模部分。
为了总结您的要求,您有 "lots of changing filter criteria" 和您需要的各种统计数据,用于各种实体。
DW 内部的数据模型通常使用星型、雪花型或数据保险库模式。 (网上有很多解释这些的文章。)如果您使用纯粹的 BI 工具,您可以将数据去规范化为一个组合数据集,这将允许您使用多种过滤和计算选项,同时仍然保持高性能和速度。
让我们看看你举的例子:
Data of Facebook friend requests and interactions over time. You need to answer:
In 2018 which American had the most German friends that like ACDC?
Which are the friends that person X most interacted with on topic Y?
You want to filter/re-calculate the answers to those questions based on country, topic, interests, time.
一个潜在的数据集可以像这样构造:
互动日期 |发起人国家 |回复人的国家 |话题 |交互类型 |发起人的最大兴趣 |回复者的最大兴趣
这样您就可以轻松计算互动的数量,并按这些列中的任何一列过滤 and/or 分组。
如您所知,这只是一个庞大主题的冰山一角,但您提出的问题绝对可行,希望 post 能帮助您入门。还有很多咨询公司也很乐意提供帮助。 (免责声明:我在其中一家咨询公司工作 :)