为FIWARE Orion ContextBroker启用MongoDB分片

为FIWARE Orion ContextBroker启用MongoDB分片,mongodb,fiware,fiware-orion,Mongodb,Fiware,Fiware Orion,我正在尝试为Orion ContextBroker和IoAgent Json设置MongoDB分片,我能够在分片之间分发MongoDB中的设备配置和服务数据,但每当我发送实际设备数据时,它都会给出以下错误: { “名称”:“实体\通用\错误”, “消息”:“访问类型为DeviceEntity1的DeviceEntity1的实体数据时出错”} 我正在使用以下命令分割集合: sh.shardCollection(“orion fiwareiot.entities”{u id.servicePath:

我正在尝试为Orion ContextBroker和IoAgent Json设置MongoDB分片,我能够在分片之间分发MongoDB中的设备配置和服务数据,但每当我发送实际设备数据时,它都会给出以下错误:

{ “名称”:“实体\通用\错误”, “消息”:“访问类型为DeviceEntity1的DeviceEntity1的实体数据时出错”}

我正在使用以下命令分割集合:
sh.shardCollection(“orion fiwareiot.entities”{u id.servicePath:1,{u id.id:1,{u id.type:1})

截获ContextBroker日志:

时间=2019年9月25日星期三06:54:22.729Z | lvl=ERROR | corr=4e22de66-df61-11e9-aa53-3464a92017cd | trans=15693933389-597-0000000000 7 | from=127.0.0.1 | srv=fiwareiot | subsrv=/raw | comp=Orion | op=AlarmManager.cpp[211]:dbError | msg=raining报警数据库错误:集合:Orion-fiwareiot.entities:更新操作异常:{index:0,代码:61,errmsg:{q:{u id.id:{DeviceEntity1',u id.type:{DeviceEntity',u id.servicePath:{$in:[/^/raw$/]}},u:{$set:{attrs.deviceName:{v..',op:{q:{u id.id:{DeviceEntity1',u id.type:{$DeviceEntity',id.servicePath:{$in:[/^/raw$/]},u:{$set:},u:{$md id:{deviceentitype:{string:},value:{{TimeInstant:{type:“ISO8601”,value:“2019-09-25T04:17:45.645Z”},mdNames:[“TimeInstant”],creDate:1569384878,modDate:15693855},attrs.locationType:{value:“O”,type:“string”,md:{TimeInstant:{type:“ISO8601”,value:“2019-09-25T04:17:45.645Z”},mdNames:[“TimeInstant”],creDate 1569384878,modDate:{,attrs.locationName:{value:“孟买”,type:“字符串”,md:{TimeInstant:{type:“ISO8601”,value:“2019-09-25T04:17:45.645Z”},mdNames:[“TimeInstant”],creDate:1569384878,modDate:1569385065},attrs.deviceType:{value:“FR”,type:“字符串”,md:{TimeInstant:{type:“ISO8601”,value:“2019-09-25T04:17:45.645Z”},mdNames:[“TimeInstant”]、creDate:1569384878、modDate:1569385065}、attrs.deviceMacAddress:{value:“84:24:8D:F8:B2:B2”、type:“string”、md:{TimeInstant:{type:“ISO8601”、value:“2019-09-25T04:17:45.645Z”}、mdNames:[“TimeInstant”]、creDate:1569384878、modDate:1569385065}、attrs.TimeInstant:{value:1569385065.0、type:“ISO8601”、mdNames:[],creDate:1569384878,modDate:1569385065},modDate:1569385065,lastCorrelator:“6d0aa4fa-df4b-11e9-8293-3464a92017cd”},$unset:{location:1,expDate:1},multi:false,upsert:false}

我还尝试手动更新文档,日志为:

更新{q:{u id.id:“DeviceEntity1”,{u id.type:“DeviceEntity”,{u id.servicePath:{$in:[/^/raw$/]},u:{$set:{attrs.deviceName:{value:“FR”,type:“string”,md:{TimeInstant:{type:“ISO8601”,value:“2019-09-25T04:17:45.645Z”},mdNames:[“TimeInstant”],creDate:1569384878.0,ModationDate:15693855065.0,AttractionType:{value:“O”,type:“string”,md:{TimeInstant:{type:{ISO8601],value:“2019-09-25T04:17:45.645Z”},mdNames:[“TimeInstant”],creDate:1569384878.0,modDate:1569385065.0},attrs.locationName:{value:“孟买”,type:“string”,md:{TimeInstant:{type:“ISO8601”,value:“2019-09-25T04:17:45.645Z”},mdNames:[“TimeInstant”],creDate:1569384878.0,modDate:15693855.0},属性设备类型:{value:“FR”,type:“string”,md:{TimeInstant:{type:“ISO8601”,value:“2019-09-25T04:17:45.645Z”},mdNames:[“TimeInstant”],creDate:1569384878.0,modDate:156938505065.0},属性设备类型:{value:“84:24:8D:F8:B2:B2”,type:“string”,md:{:{TimeInstant:{ISO8601”,value:“2019-09-25T04:17:45.645Z”},mdNames:[“TimeInstant”],creDate:1569384878.0,modDate:156938505.0},attrs.TimeInstant:{value:156938505.0,type:“ISO8601”,mdNames:[],creDate:1569384878.0,modDate:156938585.0},modDate:156938585.0,lastCorrelator:“6d0aa4fa-df4b-11e9-8293-3464a92017cd”}{location:1.0,expDate:1.0},multi:false,upsert:false}不包含{u id.servicePath:1.0,{u id.id:1.0,{u id.type:1.0}模式的{u id或碎片键

对于以下复合文档id,我应该遵循什么MongoDB shard关键策略,
\u id.id
\u id.servicePath
可能有多个文档。 我想在两个MongoDB碎片中分发带有
“\u id.id”:“DeviceEntity1”
“\u id.id”:“DeviceEntity2”
的数据

    "_id" : {
        "id" : "DeviceEntity1",
        "type" : "DeviceEntity",
        "servicePath" : "/raw"
    },... 
谢谢。

我不太确定(自从上次MongoDB分片设置以来已经过了很长时间:),但我建议先尝试使用更简单的分片键。例如:

db.shardCollection("orion-fiwareiot.entities", {"_id.id": 1})
看看情况如何

关于:

我想在两个MongoDB碎片中分发带有
“\u id.id”:“DeviceEntity1”
“\u id.id”:“DeviceEntity2”
的数据

    "_id" : {
        "id" : "DeviceEntity1",
        "type" : "DeviceEntity",
        "servicePath" : "/raw"
    },... 
也许我记不清了,或者它在最近的MongoDB版本中发生了更改,但据我所知,您无法选择特定文档的去向。您设置了切分键,MongoDB切分系统会根据键的范围在切分之间分发文档。但您无法确保特定文档在给定的时间内,在特定的分片中进行分片。

我不完全确定(自从上次MongoDB分片设置以来,已经过了很长时间:),但我建议先尝试使用更简单的分片键。例如:

db.shardCollection("orion-fiwareiot.entities", {"_id.id": 1})
看看情况如何

关于:

我想在两个MongoDB碎片中分发带有
“\u id.id”:“DeviceEntity1”
“\u id.id”:“DeviceEntity2”
的数据

    "_id" : {
        "id" : "DeviceEntity1",
        "type" : "DeviceEntity",
        "servicePath" : "/raw"
    },... 
也许我记不清了,或者它在最近的MongoDB版本中发生了更改,但据我所知,您无法选择特定文档的去向。您设置了切分键,MongoDB切分系统会根据键的范围在切分之间分发文档。但您无法确保特定文档D