FIWARE-Orion上下文代理偏移参数行为

FIWARE-Orion上下文代理偏移参数行为,fiware-orion,Fiware Orion,关于FIWARE Orion Context Broker,我面临以下问题,希望有人对此有所了解 我将记录存储在FIWARE Orion CB版本1.2.0中,运行在Docker实例中,并且在一种类型中,我在向发送GET调用后收到以下响应 如你所见,“计数”是55811。但是,当我向发送另一个GET呼叫时,我会收到以下信息: [ { "id": ".*", "type": "MyTYPE" } ] 从该偏移量(54908)及以上,响应是相同的。我

关于FIWARE Orion Context Broker,我面临以下问题,希望有人对此有所了解

我将记录存储在FIWARE Orion CB版本1.2.0中,运行在Docker实例中,并且在一种类型中,我在向发送GET调用后收到以下响应

如你所见,“计数”是55811。但是,当我向发送另一个GET呼叫时,我会收到以下信息:

[
    {
        "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 }
    
解决方案是在用于排序的DB字段中创建索引。在默认排序的情况下(基于创建日期),可以在Mongo shell上创建索引,如下所示(假设
[
    {
        "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})