- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们在预聚合创建性能方面遇到问题。目前,我们对每个客户的数据都有特定的过滤器,并且通过扩展基本多维数据集(称为 Metrics
)并定义代表这些数据的段,为每个客户生成不同的多维数据集。过滤器。
总而言之,我们有一个 Metrics
基础立方体,我们生成动态立方体 MetricsA, MetricsB, MetricsC
为客户A, B, C
。这些立方体中的每一个都有一个我们称为 z
的段。 ,其中包含我们每个客户的特定 SQL 查询。使用 asyncModule
从我们的 API 检索构建分段的数据。 ,然后我们扩展 Metrics
通过覆盖 z
生成所有客户端特定的多维数据集。与客户的 filter
进行分段。通过这样做,当客户端查询多维数据集服务时,检索到的数据将来自其特定的多维数据集,并且数据已经过滤(通过强制 z
段)。
这个Metrics立方体是通过连接大表构建的,所以我们还添加了一个partitionGranularity
(每月)以减少预聚合的大小,但构建它们的时间仍然太长(> 10 分钟)。
我们需要编辑多维数据集服务提交的特定查询来创建预聚合表,因此我们只保留 z
的行。 Segment = 1(因为这是相关数据),或者至少我们希望能够重新排列/修改查询以提高性能。哪个地方是进行此类更改的最佳位置?或者干预此过程的建议做法是什么?
最佳答案
您可以使用两种方法在 Multi-Tenancy 环境中利用预聚合。
sql
,例如 OrdersC1
、OrdersC2
等。在这种情况下,所有预聚合都在基 中定义>Orders
多维数据集将被继承。每个客户多维数据集都有自己的一组预聚合。这意味着如果有 N
个客户和 M
个预聚合,则应构建 N * M
个预聚合表,这可能会导致成本高昂一些场景。cube(`Orders`, {
sql: `SELECT * FROM orders`,
preAggregations: {
date: {
type: `rollup`,
measureReferences: [someMeasure],
dimensionReferences: [someDimension],
timeDimensionReference: date,
granularity: `month`
},
// ...
}
});
cube(`OrdersC1`, {
extends: Orders,
sql: `SELECT * FROM orders WHERE customer_id = 'C1'`,
});
cube(`Orders`, {
sql: `SELECT * FROM orders`,
// ...
dimensions: {
// ...
customerId: {
sql: `customer_id`,
type: `string`
}
},
preAggregations: {
date: {
type: `rollup`,
measureReferences: [someMeasure],
dimensionReferences: [customerId, someDimension],
timeDimensionReference: date,
granularity: `month`
},
// ...
}
});
关于javascript - 如何改进cubejs预聚合创建过程? (即使使用partitionGranularity,构建预聚合也需要很长时间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60195250/
我是一名优秀的程序员,十分优秀!