繁体   English   中英

FIWARE - Orion Context Broker偏移参数行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM