标签: aggregate

通过聚合SQL审计记录来衡量应用程序性能

假设有一个包含两列的简单审计表(在生产中有更多列):

ID | Date
Run Code Online (Sandbox Code Playgroud)

处理请求时,我们在此表中添加一条记录.请求分批处理,批处理中可以有任意数量的项目.对于每个项目,我们将添加一条记录.批次之间将存在至少2秒的延迟(该数量是可配置的).

性能是通过每单位时间(例如每秒)处理请求的速度来衡量的.考虑这个示例数据(2个集群,项目数量相同,仅用于演示目的):

--2016-01-29 10:27:25.603
--2016-01-29 10:27:25.620
--2016-01-29 10:27:25.637
--2016-01-29 10:27:25.653
--2016-01-29 10:27:25.723
--Avg time between requests = 24ms

--2016-01-29 10:27:34.647
--2016-01-29 10:27:34.667
--2016-01-29 10:27:34.680
--2016-01-29 10:27:34.690
--2016-01-29 10:27:34.707
--Avg time = 12ms
Run Code Online (Sandbox Code Playgroud)

我们可以说,在最坏的情况下,每秒可以处理41.67个请求,最多可以处理83.33个请求.很高兴知道平均批次性能.

题.是否可以单独使用T-SQL获取这些指标以及如何使用?

编辑:要使结果具有统计显着性,丢弃批次可能比小于10个项目(可配置)更有用.

sql t-sql sql-server aggregate performance-testing

5
推荐指数
1
解决办法
80
查看次数

DDD - 如何补水

问题:从存储库中重新合成聚合的最佳,有效和面向未来的方法是什么?提供方式的专家和内容是什么,我的看法是否正确?

假设我们有一个带私有setter的Aggregate Root,但是有一个用于访问状态的公共getter

行为是通过聚合根上的方法完成的.

指示存储库加载聚合.

目前我看到了几种可能的方法来实现这一目标:

  1. 通过反射设置状态(手动或自动,例如Automapper)
  2. make 构造函数接受属性,以便设置状态
  3. 使用状态对象加载聚合

1)Jimmy Bogard暗示他的工具Automapper不适用于双向映射.但有些人认为我们必须务实,以一种帮助你的方式使用工具.

对我来说,我不喜欢通过反射完全补液.也许Automapper存在,或者聚合根被弯曲,这样就可以完成映射(参见Vaughn对他的文章的一些评论).

2)创建用于补液的构造因子,具有几个参数,因此聚集体的状态以正确的方式再水合.

这几个参数可以扩展(=新构造函数)或定义可以更改.我喜欢这种方法,除了有一堆参数的部分.

3)状态是聚合根的属性.状态被封装在一个新对象中,该对象由存储库构建,然后被提供给聚合根以获得正确的init.

有些人认为构建这个状态对象是更多的工作(新类,实体上的状态属性暴露和聚合根来强制执行业务规则),但它提供了一种初始化状态的简洁方法.

假设我们需要事件源,加载状态是否类似于加载事件?状态对象是否提供了处理事件的方法?它是未来的证据吗?

domain-driven-design aggregate automapper

5
推荐指数
1
解决办法
1184
查看次数

按聚合动态列名匹配进行分组

是否可以group_by使用dplyr在列名上使用正则表达式匹配?

library(dplyr) # dplyr_0.5.0; R version 3.3.2 (2016-10-31)

# dummy data
set.seed(1)
df1 <-  sample_n(iris, 20) %>% 
  mutate(Sepal.Length = round(Sepal.Length),
         Sepal.Width = round(Sepal.Width))
Run Code Online (Sandbox Code Playgroud)

静态版本分组(外观/工作正常,想象一下,如果我们有10-20列):

df1 %>% 
  group_by(Sepal.Length, Sepal.Width) %>% 
  summarise(mySum = sum(Petal.Length))
Run Code Online (Sandbox Code Playgroud)

动态分组- "丑陋"版本:

df1 %>% 
  group_by_(.dots = colnames(df1)[ grepl("^Sepal", colnames(df1))]) %>% 
  summarise(mySum = sum(Petal.Length))
Run Code Online (Sandbox Code Playgroud)

理想情况下,这样的事情(不起作为starts_with返回索引):

df1 %>% 
  group_by(starts_with("Sepal")) %>% 
  summarise(mySum = sum(Petal.Length))
Run Code Online (Sandbox Code Playgroud)
Error in eval(expr, envir, enclos) : 
   wrong result size (0), expected 20 or 1
Run Code Online (Sandbox Code Playgroud)

预期产量:

# Source: local data frame …
Run Code Online (Sandbox Code Playgroud)

aggregate r dplyr

5
推荐指数
1
解决办法
1353
查看次数

Pandas:具有多种功能的分组和聚合

情况

我有一个 pandas 数据框定义如下:

import pandas as pd

headers = ['Group', 'Element', 'Case', 'Score', 'Evaluation']
data = [
    ['A', 1, 'x', 1.40, 0.59],
    ['A', 1, 'y', 9.19, 0.52],
    ['A', 2, 'x', 8.82, 0.80],
    ['A', 2, 'y', 7.18, 0.41],
    ['B', 1, 'x', 1.38, 0.22],
    ['B', 1, 'y', 7.14, 0.10],
    ['B', 2, 'x', 9.12, 0.28],
    ['B', 2, 'y', 4.11, 0.97],
]
df = pd.DataFrame(data, columns=headers)
Run Code Online (Sandbox Code Playgroud)

在控制台输出中看起来像这样:

  Group  Element Case  Score  Evaluation
0     A        1    x   1.40        0.59
1     A        1    y   9.19 …
Run Code Online (Sandbox Code Playgroud)

python aggregate dataframe pandas

5
推荐指数
1
解决办法
1873
查看次数

PostgreSQL 50M+行表聚合查询

问题陈述

\n\n

我有表“event_statistics”,其定义如下:

\n\n
CREATE TABLE public.event_statistics (\n    id int4 NOT NULL DEFAULT nextval(\'event_statistics_id_seq\'::regclass),\n    client_id int4 NULL,\n    session_id int4 NULL,\n    action_name text NULL,\n    value text NULL,\n    product_id int8 NULL,\n    product_options jsonb NOT NULL DEFAULT \'{}\'::jsonb,\n    url text NULL,\n    url_options jsonb NOT NULL DEFAULT \'{}\'::jsonb,\n    visit int4 NULL DEFAULT 0,\n    date_update timestamptz NULL,\nCONSTRAINT event_statistics_pkey PRIMARY KEY (id),\nCONSTRAINT event_statistics_client_id_session_id_sessions_client_id_id_for \nFOREIGN KEY \n(client_id,session_id) REFERENCES <?>() ON DELETE CASCADE ON UPDATE CASCADE\n)\nWITH (\n    OIDS=FALSE\n) ;\nCREATE INDEX regdate ON public.event_statistics (date_update \ntimestamptz_ops) ;\n
Run Code Online (Sandbox Code Playgroud)\n\n

和表“客户”: …

sql postgresql aggregate query-optimization

5
推荐指数
1
解决办法
2339
查看次数

如何将猫鼬聚合结果转换为特定的文档模式类型?

考虑以下聚合:

\n\n
let getUsersWithNoPersonsPromise = () => {\n\n        let pipeline = [\n            {\n                $lookup: {\n                    from: "persons",\n                    localField: "id",\n                    foreignField: "person_id",\n                    as: "persons_users"\n                }\n            },\n            {\n                $match: {\n                    "persons_users:0": {\n                        $exists: false\n                    }\n                }\n            }\n        ];\n\n\n        return User.aggregate(pipeline).exec();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何将$match结果转换为 UserModel 类型?I\xc2\xb4m 在其上获取普通的 javascript 对象,并且我希望收到 mongoose User 类型对象。

\n

casting aggregate mongoose mongodb aggregation-framework

5
推荐指数
1
解决办法
1118
查看次数

具有多个聚合列和总计列的 SQL Server PIVOT

我想生成一个数据透视表,每个数据透视列有 2 个总和聚合。然后在枢轴列的右侧,我想要一些总列。最后,枢轴列的数量是动态的。我的首选结果如下:

所需输出

我的数据如下所示:

数据透视表示例的日期

这个答案来看,我已经非常接近解决它了。这是我所拥有的:

SELECT *
FROM (
    SELECT B.SiteID, R.BuildingID, C.*
    FROM Rooms R JOIN Buildings B
        ON R.BuildingID = B.BuildingID
    CROSS APPLY (
        VALUES(RTRIM(RoomType) + ' NASF', AreaNASF)
             ,(RTRIM(RoomType) + ' RSF', AreaRSF)
        ) C (Item,Value)
) src
PIVOT (
    SUM([Value])
    FOR [Item] IN ([CONFERENCE NASF], [CONFERENCE RSF], [OFFICE NASF], [OFFICE RSF], [STORAGE NASF], [STORAGE RSF])
) pvt
Run Code Online (Sandbox Code Playgroud)

其产生:

我已经走了多远

我的印象是我必须在 SQL 之外执行两行标题。我需要帮助的是如何添加总列数。STUFF另外,除了我在很多地方看到的解决方案之外,还有更好的动态列解决方案吗?

以下是创建示例数据的 SQL:

CREATE TABLE Buildings (
    BuildingID CHAR(12),
    SiteID CHAR(12),
    Name …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server pivot aggregate pivot-table

5
推荐指数
1
解决办法
5659
查看次数

Redshift SUPER 类型上的聚合

语境

我正在尝试找到在 Redshift 中表示和聚合高基数列的最佳方式。源是基于事件的,看起来像这样:

用户 时间戳 事件类型
1 2021-01-01 12:00:00
1 2021-01-01 15:00:00 酒吧
2 2021-01-01 16:00:00
2 2021-01-01 19:00:00

在哪里:

  • 用户数量非常多
  • 单个用户可以拥有大量事件,但不太可能拥有许多不同的事件类型
  • 不同event_type值的数量非常大,并且不断增长

我想将这些数据聚合成一个更小的数据集,每个用户只有一条记录(文档)。这些文件随后将被导出。感兴趣的聚合是这样的:

  • 活动数量
  • 最近活动时间

但是也:

  • 每个 event_type 的事件数

我发现后一种情况很困难。

我考虑过的解决方案

解决此问题的简单“列数据库友好”方法就是为每个事件类型创建一个聚合列:

用户 nb_事件 ... NB_foo nb_bar
1 2 ... 1 1
2 2 ... 2 0

但我认为这不是一个合适的解决方案,因为 event_type 字段是动态的,可能有数百或数千个值(Redshift 的上限为 1600 列)。而且,这个 event_type 字段上可能有多种类型的聚合(不仅仅是count)。

第二种方法是将数据保持垂直形式,其中不是每个用户一行,而是每个(user, event_type)一行。然而,这实际上只是推迟了问题——在某些时候,数据仍然需要聚合成每个用户的单个记录以实现目标文档结构,并且列爆炸的问题仍然存在。

该数据的更自然的(我认为)表示是稀疏数组/文档/SUPER:

用户 nb_事件 ... 按事件类型计数(超级)
1 2 ... …

aggregate correlated-subquery amazon-redshift

5
推荐指数
0
解决办法
1338
查看次数

Pandas .agg() 转换为列表但跳过 nan

如何合并/减少 DataFrame,以便它按自定义列“id”合并行,并将值放入列表中(如果它们不是 Nan)。到目前为止,我想出了这个,但它并没有删除 Nans:

x: pd.DataFrame = df_chunk.groupby('id', dropna=True).agg(lambda x: list(x))
for row in x.itertuples():
    print(row)
Run Code Online (Sandbox Code Playgroud)

所以结果是:

Pandas(Index=1, surname=['Bruce', nan, nan], given_name=['Erin', nan, nan], date_of_birth=['11/03/1961', '11/04/1961', '11/06/1961'], address=['10 Kestrel Wood Way, York', '4 Ward Avenue, Cowes', '11 Woodhill Court, Woodside Road, Amersham'], postcode=['YO31 9EJ', 'BD10 0LT', 'WA14 1LH'], mobile=['+64 21 421 2300', '+64 29 975 1551', '+64 22 5491 7112'])
Run Code Online (Sandbox Code Playgroud)

期望的结果是 surname=['Bruce']、given_name=['Erin'] 等等

aggregate nan dataframe python-3.x pandas

5
推荐指数
1
解决办法
1696
查看次数

如何在 C++ 中使用原始数组成员概括从 std::array 到 struct 的转换?

在 C++ 中,我有这个来自 C 的结构。这段代码非常旧,无法修改:

struct Point {
   double coord[3];
};
Run Code Online (Sandbox Code Playgroud)

另一方面,我有这个现代函数,它返回现代std::array而不是原始数组:

std::array<double, 3> ComputePoint();
Run Code Online (Sandbox Code Playgroud)

目前,为了Point从返回值初始化 a,我手动从 中提取每个元素std::array

std::array<double, 3> ansArray{ComputePoint()};
Point ans{ansArray[0], ansArray[1], ansArray[2]};
Run Code Online (Sandbox Code Playgroud)

这个解决方案是可行的,因为只有三个坐标。我可以将其模板化为一般长度吗?我想要类似相反的转换:std::to_array

c++ arrays aggregate initialization stdarray

5
推荐指数
1
解决办法
141
查看次数