固件对每个请求进行不同的排序

问题描述 投票:0回答:1

当我使用 Fiware orion-ld 发送请求时,它会不断更改顺序。这需要保持不变。这是什么原因呢?

样本数据如下。

[ { "id": "urn:ngsi-ld:yilliktopluenerjituketimi:2f63e178-4e0e-4319-a3b4-0f9814b097f5", “类型”:“yilliktoluenerjituketimi”, "ay": "苏巴特", “co2EmisyonuDogalgazKgCo2”:25617.26832, “co2EmisyonuElektrikKgCo2”:209561.884, “co2EmisyonuYakitKgCo2”:26800, “dogalgazKwh”:126818.16, “电动千瓦时”:341306, “yakitKwh”:76019.875, “年份”:2024 }, { "id": "urn:ngsi-ld:yilliktoluenerjituketimi:ad3f268a-18ad-4c7c-b4ca-3a2f6ee284f5", “类型”:“yilliktoluenerjituketimi”, “ay”:“奥卡克”, “co2EmisyonuDogalgazKgCo2”:25114.3368, “co2EmisyonuElektrikKgCo2”:214071.1, “co2EmisyonuYakitKgCo2”:30649.6, “dogalgazKwh”:124328.4, “电动千瓦时”:348650, “yakitKwh”:86939.506, “年份”:2024 }, { "id": "urn:ngsi-ld:yilliktoluenerjituketimi:7b218913-2c1b-46ef-9be7-29f15c9d8986", “类型”:“yilliktoluenerjituketimi”, “ay”:“市场”, “co2EmisyonuDogalgazKgCo2”:28267.33056, “co2EmisyonuElektrikKgCo2”:219725.426, “co2EmisyonuYakitKgCo2”:31420.8, “dogalgazKwh”:139937.28, “elektrikKwh”:357859, “yakitKwh”:89127.063, “年份”:2024 }, { “id”:“瓮:ngsi-ld:yilliktoluenerjituketimi:79f29c7f-8373-4b66-b8cc-a1b4bb73be15”, “类型”:“yilliktoluenerjituketimi”, "ay": "尼散月", “co2EmisyonuDogalgazKgCo2”:24282.56544, “co2EmisyonuElektrikKgCo2”:205822.01, “co2EmisyonuYakitKgCo2”:31305.6, “dogalgazKwh”:120210.72, “电动千瓦时”:335215, “yakitKwh”:88800.291, “年份”:2024 }, { “id”:“瓮:ngsi-ld:yilliktopluenerjituketimi:431af7d3-1a6f-43f0-945d-8d05a7433f47”, “类型”:“yilliktoluenerjituketimi”, "ay": "五月", “co2EmisyonuDogalgazKgCo2”:24705.9736, “co2EmisyonuElektrikKgCo2”:201862.938, “co2EmisyonuYakitKgCo2”:28041.6, “dogalgazKwh”:122306.8, “电动千瓦时”:328767, “yakitKwh”:79541.751, “年份”:2024 }, { “id”:“瓮:ngsi-ld:yilliktoluenerjituketimi:b61d84c1-5596-45dc-a4f2-6a71fc37e540”, “类型”:“yilliktoluenerjituketimi”, "ay": "哈兹兰", “co2EmisyonuDogalgazKgCo2”:25890.22688, “co2EmisyonuElektrikKgCo2”:217440.118, “co2EmisyonuYakitKgCo2”:30758.4, “dogalgazKwh”:128169.44, “电动千瓦时”:354137, “yakitKwh”:87248.124, “年份”:2024 } ]

fiware fiware-cygnus
1个回答
0
投票

很简单,维护有序列表不被认为是上下文代理的工作。如果您查看 ETSI 的当前1.7.1 NGSI-LD 规范并查找作品“排序”“有序”,您会发现根本没有提到维护顺序。

原因是上下文代理不是数据库。当您进行诸如

/entities?type=Sensor&q=temperature>30
之类的实体查询时,上下文代理将返回其 locally 知道的有关
Sensors
的所有内容(其中
temperature
目前高于 30),并且还询问 remotely 所有已注册的关于
Sensors 的上下文源
他们知道的实体的
temperature
目前也高于 30。

这种分布式特性导致了以下有关排序的问题。首先,注册的上下文源可以独立更新,因此必须始终跨所有源进行查询。其次,任何已注册的上下文源当前可能不可用,第三,任何已注册的上下文源都可以按任何顺序响应。

在内部,上下文代理会尽力整理所有这些信息并返回其当前系统状态的整体正确表示。之后添加另一个排序步骤会减慢代理本身的响应时间。在大多数应用中这不是必需的。

现在,您的用户代理可以使用一行代码对上下文代理响应本身中的实体进行排序:

ordered.sort((a, b) => a.id.localCompare(b.id));

这不会增加代理的开销,但允许您以随机顺序接收数据,并按照您需要的方式使其保持一致。

除此之外,您指的是哪种具体排序顺序? ASCII? 德语瑞典语立陶宛语?所有这些都会导致不同的顺序。

由于 NGSI-LD 不强制要求特定的后备数据库,因此您无法对本地实体所保存的默认排序顺序做出任何推断。

© www.soinside.com 2019 - 2024. All rights reserved.