FIWARE - Orion Context Broker 偏移参数行为
FIWARE - Orion Context Broker offset parameter behaviour
我面临以下关于 FIWARE Orion Context Broker 的问题,希望有人对此有所了解。
我将记录存储在 FIWARE Orion CB 版本 1.2.0 中,运行 在一个 Docker 实例中,在一种类型中,我在向 [=12= 发出 GET 调用后收到以下响应]
{
"attrs": {
"cid": {
"types": [
"String"
]
},
"datetime": {
"types": [
"String"
]
},
"humidity": {
"types": [
"Float"
]
},
"luminosity": {
"types": [
"Integer"
]
},
"temperature": {
"types": [
"Float"
]
}
},
"count": 55811
}
如您所见,“计数”为 55811。但是,当我向 http://mywebsite.eu:1026/v2/entities?type=MyTYPE&offset=54908&limit=1 发送另一个 GET 调用时,我收到以下信息:
[
{
"id": ".*",
"type": "MyTYPE"
}
]
从那个偏移量 (54908) 开始,响应是相同的。我检查了我的服务器中的 space 并且有很多,所以这不是磁盘 space 的问题。我已经检查过数据是否以与之前相同的方式从我的 Raspberries 发送到 Orion CB。所以,我的问题是 Orion 可以存储的每种类型的记录是否有上限,当达到此限制时我应该更改类型。也许我缺少一些东西,你能给我的任何建议都会对我有很大帮助。
offset 参数表示在 returning 结果之前必须跳过多少个元素。因此,offset=0(如果省略了 offset 参数,则为默认值)表示从第一个元素开始,offset=1 表示从第二个元素开始,so.
让我们考虑 ASN 类型,它有 54879 个实体(如 GET /v2/types/ASN
所示)。使用 offset=0 我们得到第一个实体(恰好是 id 1470515373636_1
的实体):
GET /v2/entities?type=ASN&limit=1
[
{
"id": "1470515373636_1"
...
}
]
现在让我们使用偏移量 54878(等于 ASN 实体总数减一)。也就是说,跳过前 54878 个实体只剩下最后一个(id 恰好是 1480344938807_1
):
GET /v2/entities?type=ASN&offset=54878&limit=1
[
{
"id": "1480344938807_1"
...
}
]
请注意,如果我们使用等于实体总数(或任何更大的数字)的偏移量,即 54879,这意味着所有实体都已被跳过。换句话说,我们正在超越极限。因此在那种情况下 Orion return 一个空的实体列表是正常的:
GET /v2/entities?type=ASN&offset=54879&limit=1
[]
另一个 "consistency" 检查:如果你颠倒顺序(默认情况下,实体按创建日期递增排序,即从旧到新,但你可以使用 orderBy
参数更改它)您可以检查以前的第一个元素现在是最后一个元素,反之亦然。特别是,orderBy=!dateCreated
通过减少创建日期(即从新到旧)对结果进行排序。
因此,现在搜索第一个元素 return 前一个元素(即 1480344938807_1
)
GET /v2/entities?type=ASN&limit=1&orderBy=!dateCreated
[
{
"id": "1480344938807_1"
...
}
]
并搜索最后一个元素 return 前最后一个(即 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"
...
}
]
请注意,在添加新实体(见上文)之前 returned []
查询。
总之,Orion Context Broker 的行为在偏移参数方面似乎符合预期。你说问题是 Orion 在特定的偏移量后不会 return 正确的结果,但请注意,如果你的偏移量超过元素总数,空结果是正确的结果。
据观察,使用较大的偏移值可能会产生以下效果:
您得到的答复是问题 post 提到的答复,例如:
[
{
"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 }
解决方案是在用于排序的数据库字段中创建索引。在默认排序(基于创建日期)的情况下,索引可以在 Mongo shell 处创建,如下所示(假设 orion
是您正在使用的数据库的名称):
$ mongo
> use orion
> db.entities.createIndex({creDate: 1})
事实上,创建 in this section in the documentation.
中描述的索引过去是个好主意
编辑:响应不正确:Orion 应使用 500 内部服务器错误以及有关该问题的描述性消息进行响应。此修复已准备好在 master 分支中发布,并将包含在 Orion 1.7.0(将于 2017 年初发布)中。
我面临以下关于 FIWARE Orion Context Broker 的问题,希望有人对此有所了解。
我将记录存储在 FIWARE Orion CB 版本 1.2.0 中,运行 在一个 Docker 实例中,在一种类型中,我在向 [=12= 发出 GET 调用后收到以下响应]
{
"attrs": {
"cid": {
"types": [
"String"
]
},
"datetime": {
"types": [
"String"
]
},
"humidity": {
"types": [
"Float"
]
},
"luminosity": {
"types": [
"Integer"
]
},
"temperature": {
"types": [
"Float"
]
}
},
"count": 55811
}
如您所见,“计数”为 55811。但是,当我向 http://mywebsite.eu:1026/v2/entities?type=MyTYPE&offset=54908&limit=1 发送另一个 GET 调用时,我收到以下信息:
[
{
"id": ".*",
"type": "MyTYPE"
}
]
从那个偏移量 (54908) 开始,响应是相同的。我检查了我的服务器中的 space 并且有很多,所以这不是磁盘 space 的问题。我已经检查过数据是否以与之前相同的方式从我的 Raspberries 发送到 Orion CB。所以,我的问题是 Orion 可以存储的每种类型的记录是否有上限,当达到此限制时我应该更改类型。也许我缺少一些东西,你能给我的任何建议都会对我有很大帮助。
offset 参数表示在 returning 结果之前必须跳过多少个元素。因此,offset=0(如果省略了 offset 参数,则为默认值)表示从第一个元素开始,offset=1 表示从第二个元素开始,so.
让我们考虑 ASN 类型,它有 54879 个实体(如 GET /v2/types/ASN
所示)。使用 offset=0 我们得到第一个实体(恰好是 id 1470515373636_1
的实体):
GET /v2/entities?type=ASN&limit=1
[
{
"id": "1470515373636_1"
...
}
]
现在让我们使用偏移量 54878(等于 ASN 实体总数减一)。也就是说,跳过前 54878 个实体只剩下最后一个(id 恰好是 1480344938807_1
):
GET /v2/entities?type=ASN&offset=54878&limit=1
[
{
"id": "1480344938807_1"
...
}
]
请注意,如果我们使用等于实体总数(或任何更大的数字)的偏移量,即 54879,这意味着所有实体都已被跳过。换句话说,我们正在超越极限。因此在那种情况下 Orion return 一个空的实体列表是正常的:
GET /v2/entities?type=ASN&offset=54879&limit=1
[]
另一个 "consistency" 检查:如果你颠倒顺序(默认情况下,实体按创建日期递增排序,即从旧到新,但你可以使用 orderBy
参数更改它)您可以检查以前的第一个元素现在是最后一个元素,反之亦然。特别是,orderBy=!dateCreated
通过减少创建日期(即从新到旧)对结果进行排序。
因此,现在搜索第一个元素 return 前一个元素(即 1480344938807_1
)
GET /v2/entities?type=ASN&limit=1&orderBy=!dateCreated
[
{
"id": "1480344938807_1"
...
}
]
并搜索最后一个元素 return 前最后一个(即 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"
...
}
]
请注意,在添加新实体(见上文)之前 returned []
查询。
总之,Orion Context Broker 的行为在偏移参数方面似乎符合预期。你说问题是 Orion 在特定的偏移量后不会 return 正确的结果,但请注意,如果你的偏移量超过元素总数,空结果是正确的结果。
据观察,使用较大的偏移值可能会产生以下效果:
您得到的答复是问题 post 提到的答复,例如:
[ { "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 }
解决方案是在用于排序的数据库字段中创建索引。在默认排序(基于创建日期)的情况下,索引可以在 Mongo shell 处创建,如下所示(假设 orion
是您正在使用的数据库的名称):
$ mongo
> use orion
> db.entities.createIndex({creDate: 1})
事实上,创建 in this section in the documentation.
中描述的索引过去是个好主意编辑:响应不正确:Orion 应使用 500 内部服务器错误以及有关该问题的描述性消息进行响应。此修复已准备好在 master 分支中发布,并将包含在 Orion 1.7.0(将于 2017 年初发布)中。