我有两个留声机对象,每一个都有数以百万行的行,我用搜索方法将它们链接起来。
在下面的示例中,我根据起飞代码筛选到航班的一个对象集,然后搜索那些航班上的乘客,然后根据旅客对象的属性再次进行筛选。
const passengersDepartingFromAirport = Objects.search()
.flights()
.filter(flight => flight.departureAirportCode.exactMatch(airportCode))
.searchAroundPassengers()
.filter(passenger => passenger.passengerAttribute.exactMatch(value));上述代码的结果是:
LOG [2022-04-19T14:25:58.182Z] { osp: {},
objectSet:
{ objectSetProvider: '[Circular]',
objectSet: { type: 'FILTERED', filter: [Object], objectSet: [Object] } },
objectTypeIds: [ 'passengers' ],
emptyOrderByStep:
{ objectSet: '[Circular]',
orderableProperties:
{ attributeA: [Object],
attributeB: [Object],
attributeB: [Object],
...现在,当我试图使用the ()或takeAsync()或使用groupBy()聚合结果时,我收到以下错误:
RemoteError: INVALID_ARGUMENT ObjectSet:ObjectSetTooLargeForSearchAround with instance ID xxx.
Error Parameters: {
"RemoteError.type": "STATUS",
"objectSetSize": "2160870",
"maxAllowedSize": "100000",
"relationSide": "TARGET",
"relationId": "flights-passengers"
}
SafeError: RemoteError: INVALID_ARGUMENT ObjectSet:ObjectSetTooLargeForSearchAround with instance ID xxx有什么方法可以聚合或减少上述ObjectSet的结果?
发布于 2022-04-19 15:45:24
当前的对象存储基础结构对搜索100,000对象的“左侧”或“启动对象集”的大小有限制。
您可以定义和对象集,它使用搜索,这是您在尝试任何进一步操作之前执行函数时所看到的结果。
使用take()或groupBy“强制”解析对象集定义。也就是说,您不再需要指向对象的指针,但是您需要实际地从每个单独的对象中物化一些数据来执行该操作。
在这个物化步骤中,限制开始发挥作用--对象集被解析,如果搜索步骤中的对象集大于100000个对象,那么请求将与上面的消息一起失败。
对象存储v2的工作还在进行中,它最终将支持更大的搜索请求,但目前有必要创建一个查询模式,该模式在进行搜索之前生成的对象少于10万个。
在某些情况下,可以创建一个“中间”对象类型,它表示数据中不同级别的粒度,或者两个反转搜索的方向,以找到解决这些限制的方法。
https://stackoverflow.com/questions/71927006
复制相似问题