[英]FIWARE - Orion Context Broker offset parameter behaviour
我正面临关于FIWARE Orion Context Broker的以下问题,我希望有人对此有所了解。
我存储在FIWARE猎户座CB,1.2.0版本的记录,在泊坞窗实例,并在一个类型的运行我收到以下消息发布一个GET调用后http://mywebsite.eu:1016/v2/types/MyTYPE
{
"attrs": {
"cid": {
"types": [
"String"
]
},
"datetime": {
"types": [
"String"
]
},
"humidity": {
"types": [
"Float"
]
},
"luminosity": {
"types": [
"Integer"
]
},
"temperature": {
"types": [
"Float"
]
}
},
"count": 55811
}
你可以看到“计数”是55811.但是,当我发送另一个GET调用http://mywebsite.eu:1026/v2/entities?type=MyTYPE&offset=54908&limit=1时 ,我会收到以下信息:
[
{
"id": ".*",
"type": "MyTYPE"
}
]
从该偏移量(54908)及以上,响应是相同的。 我已经检查了服务器中的空间并且有足够的空间,所以这不是磁盘空间问题。 我已经检查过数据是从Raspberries中以与以前相同的方式进入Orion CB。 所以,我的问题是,如果Orion可以存储的每种类型的记录有一个上限,当达到此限制时,我应该更改类型。 也许有一些我想念的东西,你给我的任何建议都会对我有所帮助。
offset参数表示在返回结果之前必须跳过多少个元素。 因此,offset = 0(如果省略偏移参数则为defaulf值)意味着从第一个元素开始,offset = 1表示从第二个元素开始,即。
让我们考虑ASN类型,它有54879个实体(显示为GET /v2/types/ASN
)。 使用offset = 0,我们得到第一个实体(恰好是id为1470515373636_1
):
GET /v2/entities?type=ASN&limit=1
[
{
"id": "1470515373636_1"
...
}
]
我们现在使用偏移54878(等于ASN实体的总数减1)。 也就是说,跳过第一个54878实体只剩下最后一个实体(id恰好是1480344938807_1
):
GET /v2/entities?type=ASN&offset=54878&limit=1
[
{
"id": "1480344938807_1"
...
}
]
请注意,如果我们使用的偏移量等于实体总数(或任何更大的数量),即54879,则表示已跳过所有实体。 换句话说,我们超越了极限。 因此,在这种情况下,Orion返回一个空的实体列表是正常的:
GET /v2/entities?type=ASN&offset=54879&limit=1
[]
另一个“一致性”检查:如果您反转顺序(默认情况下,实体按增加创建日期排序,即从较旧到较新,但您可以使用orderBy
参数更改),您可以检查前一个元素现在是最后和反之亦然。 特别是, orderBy=!dateCreated
订单的结果是减少创建日期(即从较orderBy=!dateCreated
较旧)。
因此,现在搜索第一个元素返回前一个元素(即1480344938807_1
)
GET /v2/entities?type=ASN&limit=1&orderBy=!dateCreated
[
{
"id": "1480344938807_1"
...
}
]
并搜索最后一个元素返回前一个元素(即1470515373636_1
)
GET /v2/entities?type=ASN&offset=54878&limit=1&orderBy=!dateCreated
[
{
"id": "1470515373636_1"
...
}
]
我们再做一次测试吧。 让我们添加一个新的ASN实体,只是为了好玩:
POST /v2/entities?options=keyValues
{
"id": "TestingEntity",
"type": "ASN",
"A": 42
}
所以,现在ASN类型中的实体总数是54880.新实体是最后一个要创建的实体,因此它将以默认排序(即增加创建日期)放在最后。 您可以使用以下查询进行检查:
GET /v2/entities?type=ASN&offset=54879&limit=1
[
{
"id": "TestingEntity"
...
}
]
请注意,该查询在添加新实体之前返回[]
(参见上文)。
总而言之,Orion Context Broker行为似乎与偏移参数一样。 你说问题是猎户座在特定的偏移数字后不会返回正确的结果,但请注意,如果你的偏移超过了元素总数,那么空结果是正确的结果。
据观察,使用较大的偏移值可能会产生以下影响:
您得到的答案是问题帖子提到的答案,例如:
[ { "id": ".*", "type": "ASN" } ]
Orion日志中会出现类似这样的错误消息:
Raising alarm DatabaseError: nextSafe(): { $err: "Executor error: OperationFailed Sort operation used more than the maximum 33554432 bytes of RAM. Add an index, or specify a smaller limit.", code: 17144 }
解决方案是在用于排序的DB字段中创建索引。 在默认排序的情况下(基于创建日期),可以在Mongo shell中创建索引,如下所示(假设orion
是您正在使用的DB的名称):
$ mongo
> use orion
> db.entities.createIndex({creDate: 1})
编辑 :响应不正确:Orion应使用500内部服务器错误响应,并提供有关问题的描述性消息。 此修复程序已准备好进入主分支,并将包含在Orion 1.7.0中(将于2017年初发布)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.