我正面临关于FIWARE Orion Context Broker的以下问题,我希望有人对此有所了解 .
我将记录存储在FIWARE Orion CB,版本1.2.0中,在Docker实例中运行,在一种类型中,我在发送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
}
正如您所看到的,“count”是55811.但是,当我向http://mywebsite.eu:1026/v2/entities?type=MyTYPE&offset=54908&limit=1发送另一个GET调用时,我会收到以下信息:
[
{
"id": ".*",
"type": "MyTYPE"
}
]
从该偏移量(54908)及以上,响应是相同的 . 我已经检查了服务器中的空间并且有足够的空间,所以这不是磁盘空间问题 . 我已经检查过数据是从Raspberries中以与以前相同的方式进入Orion CB . 所以,我的问题是,如果Orion可以存储的每种类型的记录有一个上限,当达到此限制时,我应该更改类型 . 也许有一些我想念的东西,你给我的任何建议都会对我有所帮助 .
2 回答
据观察,使用较大的偏移值可能会产生以下影响:
解决方案是在用于排序的DB字段中创建索引 . 在默认排序的情况下(基于创建日期),可以在Mongo shell中创建索引,如下所示(假设
orion
是您正在使用的DB的名称):实际上,创建描述in this section in the documentation的索引是一个好主意 .
EDIT :响应不正确:Orion应使用500内部服务器错误响应,并提供有关问题的描述性消息 . 此修复程序已准备好进入主分支,并将包含在Orion 1.7.0中(将于2017年初发布) .
offset参数表示在返回结果之前必须跳过多少个元素 . 因此,offset = 0(如果省略偏移参数则为defaulf值)意味着从第一个元素开始,offset = 1表示从第二个元素开始,即 .
让我们考虑ASN类型,它有54879个实体(显示为
GET /v2/types/ASN
) . 使用offset = 0,我们得到第一个实体(恰好是id为1470515373636_1
的实体):我们现在使用偏移54878(等于ASN实体的总数减1) . 也就是说,跳过第一个54878实体只剩下最后一个(id恰好是
1480344938807_1
):请注意,如果我们使用的偏移量等于实体总数(或任何更大的数量),即54879,则表示已跳过所有实体 . 换句话说,我们超越了极限 . 因此,在这种情况下,Orion返回一个空的实体列表是正常的:
另一个"consistency"检查:如果您反转顺序(默认情况下,实体按增加创建日期排序,即从较旧到较新,但您可以使用
orderBy
参数更改),您可以检查前一个元素现在是最后一个反之亦然 . 特别是,orderBy=!dateCreated
订单的结果是减少创建日期(即从较新到较旧) .因此,现在搜索第一个元素返回前一个元素(即
1480344938807_1
)并搜索最后一个元素返回前一个元素(即
1470515373636_1
)我们再做一次测试吧 . 让我们添加一个新的ASN实体,只是为了好玩:
所以,现在ASN类型中的实体总数是54880.新实体是最后一个要创建的实体,因此它将以默认顺序(即增加创建日期)放在最后 . 您可以使用以下查询进行检查:
请注意,该查询在添加新实体之前返回
[]
(参见上文) .总而言之,Orion Context Broker行为似乎与偏移参数一样 . 你说问题是猎户座在特定的偏移数字后不会返回正确的结果,但请注意,如果你的偏移超过了元素总数,那么空结果是正确的结果 .