标签: aggregation

UML表示法 - 聚合/组合与"香草"关联

我最近花了很多时间来执行我编写的各种SW组件的详细UML设计.回顾一下我最近完成的事情,并将其与我第一次学习UML时的情况进行比较,我发现我现在几乎严格使用聚合和组合关系,并且几乎放弃了"香草"非定向/定向关系.我当然仍然使用泛化和实现,但这些与上面的明显不同,并不被视为此问题的一部分.

在我看来,聚合/组合意味着"香草"联想的含义相同,等等.聚合和组合自然意味着一个方向,任何现代UML程序仍然允许您在聚合/组合关系上定义多重性并将动词应用于关系.那时,我认为香草协会的目的不大.

我理解有些人很难理解聚合和组合之间的区别.在早期,我有点难以理解他们的差异,我相信混淆是我使用香草协会的部分原因.我现在处于这样的地步,我看到很少或没有使用香草协会,并且实际上不喜欢看到它们被使用,因为我相信它们会留下一些问题(特别是两个对象之间强大或弱的生命周期关系).我相信香草协会唯一的实际用途是当你对手头问题的理解还没有发展到足以确定聚合和成分之间的生命周期差异时.在这种情况下,最好至少表明关系存在,然后当您更好地理解手头的问题时,您可以回来并适当地改变它.

长话短说,我相信人们使用香草协会的绝大多数时间,他们可以更准确地描述为聚合,有时作为一个组合.在我的信念中,我是非常错的吗?我错过了什么吗?让我听听吧!

uml associations composition aggregation

6
推荐指数
1
解决办法
1965
查看次数

clojure中的预聚合数据结构

在OLAP-cubes中,可以对大量聚合数据进行快速查找.这样做的主要原因是一个预先聚合操作中的数据,这些数据易于向上组合(主要是+, - ,mean,std,max,min等等).

如何在clojure中获得这种"反懒惰"行为?

我正在考虑类似的事情

(def world-population {:africa 4e8            ;;this is an aggregation!
                       :africa/liberia 3.4e6
                       :africa/ethiopia 7.4e7
                       ...})
Run Code Online (Sandbox Code Playgroud)

如何更新这样的数据结构并确保实体的父级也更新?有人必须推出自己的ref实现吗?

olap clojure aggregation

6
推荐指数
1
解决办法
450
查看次数

这是不好的OO编程?通过方法传递这一点

好吧,假设我有一个类,X和X是与其他对象有聚合关系的东西.让假装X是一个足球场.

X满是观众.然而,每个观众对特定活动的行为不同.而不是IF语句,我希望不同的行为在观众类中,以便我可以使用动态绑定.

然而,问题在于观众执行的行为影响"足球场"类.所以我想把"这个"从足球场的课程,通过一种方法传递给观察者课程,以便观众班可以为足球场课程做些什么?

public class SoccerStadium{
    SpecatorInterface s = new Spectator();

    public void SpectatorBehaviour(){
        s.doSomething(this);
    }

    public void doSomethingthingBySpecator(){
    }
}

public class Spectator implements SpecatorInterface{
    public void doSomething(SoccerStadium s){
        s.doSomethingthingBySpecator();
    }
}
Run Code Online (Sandbox Code Playgroud)

我只想这样做,这样我就可以使用动态绑定并改变行为,Specator.doSomething()这样我可以将许多不同类型的SpectatorSuperClass作为传递给SoccerStadium的属性然后具有不同的行为.

编辑:如果我通过Spectator构造函数将体育场的引用传递给Specator,而不是传递this怎么办?

java oop design-patterns aggregation

6
推荐指数
1
解决办法
675
查看次数

聚合多样性UML

我和我的同事无法就此达成共识。在UML中,进行聚合时,菱形面的最大折数是否为1,或者可以为0 .. *?还是取决于观点?
先感谢您 !

uml aggregation multiplicity

6
推荐指数
2
解决办法
7995
查看次数

如何在R中使用聚合函数

你能帮我解决一下如何在R中正确使用聚合函数吗?我有这样的数据:

SPORT   FLOWS
[1,] "Other" "1"  
[2,] "Other" "1"  
[3,] "Other" "1"  
[4,] "Other" "1"  
[5,] "Other2" "1"  
[6,] "Other2" "1"
Run Code Online (Sandbox Code Playgroud)

我需要得到这个:

SPORT   FLOWS
[1,] "Other" "4"
[2,] "Other2" "2"
Run Code Online (Sandbox Code Playgroud)

我发现,它可以用聚合函数完成,但它不起作用..

谢谢你们..我有明确的回答,对我有用..

r aggregation

6
推荐指数
1
解决办法
8938
查看次数

注释聚合

我有多个类,我总是在定义表的主键的字段上使用相同的注释,例如:

@Id 
@Type(type = "uuid-binary")
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2", 
parameters = { @Parameter(
        name = "uuid_gen_strategy_class", 
        value = "org.hibernate.id.UUIDGenerationStrategy") 
})
@Column(name="PROFILE_ID", unique = true)
@NotNull(message = "we have one message" , payload =Severity.Info.class)
private UUID profileId;
Run Code Online (Sandbox Code Playgroud)

现在我正在寻找一种方法,在我进行验证时将所有这些注释聚合到一个单独的注释,比如注释聚合,即我可以将@NotNull和@Size从(javax.validation.constraints)聚合到以下注释"Name" .

 package org.StudentLib.CustomeAnnotations;
 import …
 @Target( {FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
 @Retention(RUNTIME)
 @Constraint(validatedBy = {})
 @Documented
 @NotNull
 @Id 
 @Size(message = "The size of the name should be between {min} and {max} caracters", 
                min = 1, max = 50, 
                payload …
Run Code Online (Sandbox Code Playgroud)

java annotations duplicates aggregation

6
推荐指数
1
解决办法
926
查看次数

ElasticSearch中的聚合(Nest)

我对弹性搜索很新,我还没有找到具体的问题.如果已经回答,我会提前道歉,我希望你能指出我正确的方向.

我一直在寻找在NEST中实现以下内容的方法:

"aggs" : {
    "fieldA" : {
        "terms" : {
            "field" : "fieldA"

        }
    },

    "fieldB" : {
        "terms" : {
            "field" : "fieldB"

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过这个:

.Aggregations(q => q.Terms("fieldA", r => r.Field(s => s.fieldA)) && q.Terms("fieldB", r => r.Field(s => s.fieldB)))
Run Code Online (Sandbox Code Playgroud)

还有这个:

.Aggregations(q => q.Terms("fieldA", r => r.Field(s => s.fieldA)))
.Aggregations(q => q.Terms("fieldB", r => r.Field(s => s.fieldB)))
Run Code Online (Sandbox Code Playgroud)

哪两个都失败了.我错过了别的什么吗?

c# aggregation elasticsearch nest

6
推荐指数
1
解决办法
6848
查看次数

如何计算分布式系统中大量数据的分布(直方图)?

我正在包含超过100,000个前端实例的实例组中构建度量报告系统.对于任何请求,每个实例都有一个响应时间.我需要的是在整个车队中分配各种请求的响应时间.例如[requestType1,requestType2 ... requestType1000]的[Percentile 50,Percentile 90,Percentile 99,Percentile99.9 ...].

每个实例都会收集内部发生的响应时间.所以一分钟之内,一个实例在内存中收集的是各种requestTypes的响应时间列表.例如requestType1 - [1,2,3,4,1,2],requestType2 - [2,2,3,2,1] ......所以我需要做的是处理这些数据并生成最后的结果.

我尝试了很多设计,我的主要痛点是我收集的每个requestType的数据点大小,以及实例之间的通信费用. 我将在下面解释我目前的设计,但我也想知道是否有更好的设计或某些花哨的算法可以聚合直方图?

目前最有希望的是:每个前端实例都会将其数据发送到中间层实例组的随机实例.在这个中间层车队中,每个实例都会聚合它在短时间内获得的所有数据点,例如5秒.(它没有足够的内存来保持更长的时间).然后,中间层实例将通过requestTypes的哈希值将聚合数据分发到后端实例.这意味着所有中间层实例都会将相同requestTypes的数据点发送到同一个后端实例.然后在后端实例中我可以使用第三方的直方图容器(CodaHale的直方图或HdrHistogram)来计算传入数据点的P50,P90,P99 ......我需要中间层实例队列的原因是从前面发送数据 - 最终实例是昂贵的,所以我希望它的所有数据一次发送,但不要100次调用发送到100个不同的后端实例.

我可能会想到这个设计的主要问题是相对较高的复杂性,如果一个后台实例关闭,我可能会丢失某些requestTypes的所有数据.那么对于系统设计部分,任何人都有一些更好的想法?

我想的另一种方法是找到一种奇特的算法来聚合现有的直方图.上面的设计,我得到的数据将是100%准确.但实际上我可以容忍一些错误.例如在CodaHale的直方图和HdrHistogram中,我确信它们实际上并没有保存所有数据点,而是应用了一些高级数学算法以非常低的成本获得相对高精度的结果.我可以在前端或中间层实例中使用直方图库.但问题是虽然我能以低成本获得每个前端实例或中间层实例的[P50,P90,P99 ......],但我找不到聚合它们的方法.因为不同的前端实例可能会处理不同类型的请求,并且对前端实例的请求分配是未知的,所以简单地计算所有P50,P90,P99的平均值会产生很多不准确.那么有没有人有想法,我怎样才能将多个CodaHale的直方图或HdrHistogram聚合在一起?或者是否有任何算法可以帮助将直方图聚合成一个?

================================================== ======================

昨晚我有了一些新想法.由于P50和P90正在测量所有数据的"平均值",我认为在每个中间层实例中计算的所有P50和P90的简单应用加权平均值应该足够好.但是P99,P99.9和P99.99正在测量那些外围数据,因此子集的P99的平均值可能不准确.

但是如果假设中间层实例中的数据是相对随机分布的,那么我可以在每个中间层实例中获得前5%的数据点,并将它们发送到后端.每个中间层数据点的5%合计为总数据点的5%.而且我更有信心,这5%数据的P80接近整体数据P99,这5%数据的P98接近整体数据的P99.9,而5%数据的P99.8接近P99 .99总体数据.

我希望通过这种方式,我只能传输5%的总体数据,但能获得高精度的结果.你觉得这样怎么样?

algorithm distribution histogram aggregation codahale-metrics

6
推荐指数
1
解决办法
811
查看次数

Elasticsearch访问直方图

我是Elasticsearch的新手,我无法根据访问范围构建直方图.我甚至不确定是否可以通过在Elasticsearch中使用单个查询来创建此类图表,但我感觉可能通过管道聚合或可能是脚本聚合.

这是我正在使用的测试数据集:

PUT /test_histo
{ "settings": { "number_of_shards": 1 }}

PUT /test_histo/_mapping/visit
{
   "properties": {
      "user": {"type": "string" },
      "datevisit": {"type": "date"},
      "page": {"type": "string"}
   }
}

POST test_histo/visit/_bulk
{"index":{"_index":"test_histo","_type":"visit"}}
{"user":"John","page":"home.html","datevisit":"2015-11-25"}
{"index":{"_index":"test_histo","_type":"visit"}}
{"user":"Jean","page":"productXX.hmtl","datevisit":"2015-11-25"}
{"index":{"_index":"test_histo","_type":"visit"}}
{"user":"Robert","page":"home.html","datevisit":"2015-11-25"}
{"index":{"_index":"test_histo","_type":"visit"}}
{"user":"Mary","page":"home.html","datevisit":"2015-11-25"}
{"index":{"_index":"test_histo","_type":"visit"}}
{"user":"Mary","page":"media_center.html","datevisit":"2015-11-25"}
{"index":{"_index":"test_histo","_type":"visit"}}
{"user":"John","page":"home.html","datevisit":"2015-11-25"}
{"index":{"_index":"test_histo","_type":"visit"}}
{"user":"John","page":"media_center.html","datevisit":"2015-11-26"}
Run Code Online (Sandbox Code Playgroud)

如果我们考虑范围[1,2 [,[2,3 [,[3,inf.[

预期结果应该是:

  • [1,2 [= 2
  • [2,3 [= 1
  • [3,inf.[= 1

我所有努力找到显示客户访问频率的直方图至今仍未成功.我很乐意提供一些提示,技巧或想法来回答我的问题.

aggregation elasticsearch

6
推荐指数
1
解决办法
343
查看次数

Java 8 Streaming:使用聚合进行分组

我在使用Stream API找到一个好的方法/实现时遇到以下困难:

我有一个元素列表,每个元素由一个字符串和一个整数组成.现在我喜欢按字符串值对元素进行分组,然后对于每个组,我希望得到与该组相关的元素的整数值之和.

示例:我有以下3个要素:

("GroupA", 100) ("GroupA", 50) ("GroupB", 10)
Run Code Online (Sandbox Code Playgroud)

因此,我希望得到一个由以下两个(键,值)对组成的映射:

("GroupA, 150) ("GroupB, 10)
Run Code Online (Sandbox Code Playgroud)

我不知道如何解决这个问题.到目前为止我想出的最有希望的是:

elements.stream().collect(Collectors.groupingBy(e-> e.getGroup()))
            .merge(group, elementsOfTheGroup, (...));
Run Code Online (Sandbox Code Playgroud)

但我不确定要插入哪个函数作为merge方法的最后一个参数.但我不知道我是否应该使用合并方法.

对此最优雅的实现是什么?

java group-by aggregation java-stream

6
推荐指数
1
解决办法
1180
查看次数