注意事项

语法相关

  • 实时更新消息必须包含一条完整的记录。否则,字段不全会导致更新失败。

  • 实时更消息的所有字段类型必须合法。比如buy_time字段是一个int32_t类型,如果在更新消息中buy_time=abc,那么这条非法消息会导致更新失败。

  • 增量表的schema字段不能包含typetype字段是增量消息保留字段。

  • 增量表的schema字段不能包含_message_time_stamp,ABFS服务端会通过 消费时间-该时间戳 统计端到端更新时延,汇报到监​控系统。

    • 用户可以在控制台中的数据表详情页->查看云监控->更新GAP查看端到端更新时延,单位微秒

    • 通过ABFS客户端更新时,会自动设置_message_time_stamp为发送的时间戳

    • 对于其他环境,可以自行在增量消息中设置_message_time_stamp,传入发送消息时的微秒时间戳

    • 数据生效的ttl会以改字段传入的值做判断,所以如果自行传入该字段,需要保证正确性,否则会影响数据生效时间

  • swift消息队列不支持二进制字节流。需要在ABFS内置字段igraph_need_decode_fields中指定字段名的方式,要求实时处理先对指定字段内容进行base64 decode,进索引的时候再base64 decode。

    • 如果要对pkey或者skey进行decode,则需指定pkey或者skey对应的field name,而不是“pkey“、“skey”这两个内置字段名本身。

/update?table=userinfo&pkey=1&category=2&profile=168%3A0.73271%2C53&weight=3.6&type=1&_igraph_need_decode_fields_=test_field1;test_field2&test_field1=MTIzIGFiYw%3D%3D&test_field2=AQMAAAAKdGVzdCB2YWx1ZQ%3D%3D
说明

igraph_need_decode_fields中指定需要base64 decode的字段名 test_field1 和 test_field2

  • swift gateway限制GET请求长度为64KB(在java sdk里使用的GET方法进行更新),超过后会被服务器拒绝。

    • 如果强行想要使用,改为POST方法,需要考虑实际环境的swift gateway是否支持POST,以及相应集群负载能力

POST方式写:curl -d "table=test&h=hashstr&msg=11112222" "http://domain/update"
GET方式写: curl "http://domain/update?table=test&h=hashstr&msg=11112222"

客户端相关

  • 建议使用客户端的异步更新接口,避免swift小概率的阻塞风险。

  • 建议在客户端将查询和更新使用独立线程

  • 异步更新时,在某个delta(T)时间内,更新(写入/删除)不保证顺序

更新的返回信息相关

  • 页面显示ok表示发送swift成功,不代表能写入到表内,如果发送增量后查不到请联系技术支持解答。

  • 页面显示error,说明发送到swift失败,可能原因表名写错,或者表不是增量表

  • 如果点更新后什么都不显示,可能原因:字段中有特殊字符(空格或者等号或者“&”符号),页面现在更新不了特殊字符。这种情况需要用客户端更新,更新的时候对字段进行URLencode。