FIWARE-Orion上下文代理偏移参数行为
关于FIWARE Orion Context Broker,我面临以下问题,希望有人对此有所了解 我将记录存储在FIWARE Orion CB版本1.2.0中,运行在Docker实例中,并且在一种类型中,我在向发送GET调用后收到以下响应 如你所见,“计数”是55811。但是,当我向发送另一个GET呼叫时,我会收到以下信息:FIWARE-Orion上下文代理偏移参数行为,fiware-orion,Fiware Orion,关于FIWARE Orion Context Broker,我面临以下问题,希望有人对此有所了解 我将记录存储在FIWARE Orion CB版本1.2.0中,运行在Docker实例中,并且在一种类型中,我在向发送GET调用后收到以下响应 如你所见,“计数”是55811。但是,当我向发送另一个GET呼叫时,我会收到以下信息: [ { "id": ".*", "type": "MyTYPE" } ] 从该偏移量(54908)及以上,响应是相同的。我
[
{
"id": ".*",
"type": "MyTYPE"
}
]
从该偏移量(54908)及以上,响应是相同的。我已经检查了服务器中的空间,并且有很多空间,所以这不是磁盘空间的问题。我已经检查过数据将以与之前相同的方式从我的树莓中传输到Orion CB。所以,我的问题是,Orion可以存储的每种类型的记录是否有一个上限,当达到这个上限时,我应该更改类型。也许我遗漏了什么,你能给我的任何建议都会对我有很大帮助。偏移量参数意味着在返回结果之前必须跳过多少个元素。因此,offset=0(如果offset参数为ommited,则为defaulf值)表示从第一个元素开始,offset=1表示从第二个元素开始,即so
让我们考虑ASN类型,它有54879个实体(如<代码> GET/V2/Type /ASN)。使用offset=0,我们得到第一个实体(正好是id为1470515373636_1的实体):
现在我们使用偏移量54878(等于ASN实体总数减去1)。也就是说,跳过前54878个实体,只剩下最后一个实体(id恰好是1480344938807_1
):
请注意,如果我们使用等于实体总数(或任何更大数字)的偏移量,即54879,则表示已跳过所有实体。换句话说,我们正在超越极限。因此,在这种情况下,Orion返回实体的空列表是正常的:
GET /v2/entities?type=ASN&offset=54879&limit=1
[]
另一个“一致性”检查:如果颠倒顺序(默认情况下,实体是通过增加创建日期排序的,即从较旧到较新,但可以使用orderBy
参数更改顺序),则可以检查前一个元素现在是最后一个,反之亦然。特别是,orderBy=!dateCreated
通过减少创建日期(即从较新日期到较旧日期)来订购结果
因此,现在搜索第一个元素将返回前一个元素的最后一个(即,1480344938807_1
)
搜索最后一个元素返回前一个元素(即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上下文代理在偏移参数方面的行为似乎和预期的一样。您说问题是Orion在特定偏移量之后不会返回正确的结果,但请注意,如果偏移量超过了元素总数,则空结果是正确的结果。偏移量参数表示返回结果之前必须跳过多少元素。因此,offset=0(如果offset参数为ommited,则为defaulf值)表示从第一个元素开始,offset=1表示从第二个元素开始,即so
让我们考虑ASN类型,它有54879个实体(如<代码> GET/V2/Type /ASN)。使用offset=0,我们得到第一个实体(正好是id为1470515373636_1的实体):
现在我们使用偏移量54878(等于ASN实体总数减去1)。也就是说,跳过前54878个实体,只剩下最后一个实体(id恰好是1480344938807_1
):
请注意,如果我们使用等于实体总数(或任何更大数字)的偏移量,即54879,则表示已跳过所有实体。换句话说,我们正在超越极限。因此,在这种情况下,Orion返回实体的空列表是正常的:
GET /v2/entities?type=ASN&offset=54879&limit=1
[]
另一个“一致性”检查:如果颠倒顺序(默认情况下,实体是通过增加创建日期排序的,即从较旧到较新,但可以使用orderBy
参数更改顺序),则可以检查前一个元素现在是最后一个,反之亦然。特别是,orderBy=!dateCreated
通过减少创建日期(即从较新日期到较旧日期)来订购结果
因此,现在搜索第一个元素将返回前一个元素的最后一个(即,1480344938807_1
)
搜索最后一个元素返回前一个元素(即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上下文代理在偏移参数方面的行为似乎和预期的一样。您说问题在于Orion在特定偏移量之后不会返回正确的结果,但请注意,如果偏移量超过元素总数,则空结果是正确的结果。据观察,使用较大的偏移量值,您可能会得到以下效果:
- 您得到的回答是问题帖子中提到的,例如:
[ { "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 }
[
{
"id": ".*",
"type": "ASN"
}
]
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 }
$ mongo
> use orion
> db.entities.createIndex({creDate: 1})