许多卖家和ISV在采用API获取订单、商品、退款等主要的信息的时候,由于网络、服务器、开发技术水平等影响,常常会出现数据重复、数据漏单或者是获取不了数据的现象,这使得卖家尤其是在应对大促的时候束手无策,只能眼睁睁的看着生意溜走或者被投诉,如何才能让卖家再也不用为这些事情烦恼呢?天猫联合淘宝、万网、阿里云一起推出了数据同步服务,通过使用聚石塔中的云数据库,实现将淘宝的订单、商品、退款等主要数据直接实时、准确地推送给用户,让用户再也不用为这些数据而烦恼!
相信ISV们在使用云数据库RDS的时候,肯定遇到过慢sql的一系列问题,我们如何能够快速的排查到原因?如何来优化sql的性能?同样,我们在使用同步服务数据库的时候,也会遇到查询时因为索引问题慢,因为子查询导致查询慢,分页的问题等等,这么麻烦的事情我们的DBA根据实际经验积累,对这些问题进行了总结和归纳,更好的帮助ISV们优化sql,更好的使用RDS以及同步服务。详细请下载:
1、各项专利技术(对单,补单)确保订单数据不漏;
有了价值和功能的介绍,那么要怎么使用订单同步服务呢,在聚石塔控制平台做如下设置,
选择订单同步服务,若订购过数据推送也会在此显示
设置推送历史数据时间(最长三个月),并根据需求设置sys_info保留时长
自定义推送类目及返回字段
选择同步到哪台RDS,选择同步的实例名称右箭头添加,RDS较多可通过搜索实例名称的方式添加
通过聚石塔Portal页面添加,点击“选择用户”选择应用所属用户
选中用户点击右箭头添加或左箭头删除已选用户,如果用户量大可通过搜索的方式添加,点击确定完成。
打勾则启用订单同步,去掉对勾刚取消订单同步
删除sys_info数据
http://api.taobao.com/apidoc/api.htm?path=apiId:22128
API的方法批量添加删除用户
//添加用户
JushitaJdpUserAddRequest request=new JushitaJdpUserAddRequest();
request.setRdsName("xxxx");//xxxx是rds实例名(注:原使用数据推送2.0的用户请需更新为权限版SDK,下载文档http://open.taobao.com/doc/detail.htm?spm=0.0.0.0.zq2Xw0&id=34)
JushitaJdpUserAddResponse response=client.execute(request,"session_xxxx");//session_xxxx为用户授权sessionKey;
使用API的方式 删除用户
//删除用户
JushitaJdpUserDeleteRequest request=new JushitaJdpUserDeleteRequest();
request.setUserId(0L);//这里设置用户id
JushitaJdpUserDeleteResponse response=client.execute(request);
注:
如果用户已经存在,调用add接口只会改变路由关系,而不会重复推历史数据。
如果先调用delete接口,再调用add接口,则会重新推送历史数据。
轮询sys_info订单同步服务数据代码示例
public static void doSyncToBiz(Connection con, String start, String end)
throws SQLException, ApiException {
// 这里以mysql库,查询交易表为例子
String query = "select tid,jdp_response from jdp_tb_trade where jdp_modified >? and jdp_modified;
PreparedStatement sqlStatement = con.prepareStatement(query);
sqlStatement.setString(1, start);
sqlStatement.setString(2, end);
ResultSet result = sqlStatement.executeQuery();
while (result.next()) {
String jdpResponse = result.getString("jdp_response");
// 把json转为API的返回对象
TradeFullinfoGetResponse rsp = TaobaoUtils.parseResponse(
jdpResponse, TradeFullinfoGetResponse.class);
// TODO isv根据业务需要把相关字段更新到业务库
//
}
}
表结构设计为:关键字段+Text大字段,其中关键字段的命名和API返回字段是一致的。业务字段增加,只增加到Text大字段里。而关键字段一旦确定,就不会再改变。
表结构如下:
交易
JDP_TB_TRADE
名称 |
类型 |
说明 |
tid |
NUMBER |
交易订单id |
status |
VARCHAR |
交易状态 |
type |
VARCHAR |
交易类型 |
seller_nick |
VARCHAR |
卖家昵称 |
buyer_nick |
VARCHAR |
买家昵称 |
created |
DATETIME |
交易创建时间 |
modified |
DATETIME |
交易修改时间 |
jdp_created |
DATETIME |
数据推送的创建时间 |
jdp_modified |
DATETIME |
数据推送的修改时间 |
Jdp_hashcode |
VARCHAR |
Jdp用来做数据校验的字段 |
jdp_response |
MEDIUMTEXT(sqlserver是TEXT) |
API返回的整个JSON字符串,格式和API保持一致 (参看taobao.trade.fullinfo.get) |
索引
jdp_tb_trade`
(`seller_nick`,`jdp_modified`),
(`jdp_modified`),
(`seller_nick`,`modified`),
(`modified`)
退款
JDP_TB_REFUND
名称 |
类型 |
说明 |
refund_id |
NUMBER |
退款单号 |
status |
VARCHAR |
退款状态 |
seller_nick |
VARCHAR |
卖家昵称 |
buyer_nick |
VARCHAR |
买家昵称 |
created |
DATETIME |
退款时间 |
modified |
DATETIME |
修改时间 |
jdp_created |
DATETIME
|
数据推送的创建时间,1970年1月1日到现在的毫秒数 |
jdp_modified |
DATETIME
|
数据推送的修改时间,1970年1月1日到现在的毫秒数 |
Jdp_hashcode |
VARCHAR |
Jdp用来做数据校验的字段 |
jdp_response |
MEDIUMTEXT (sqlserver是TEXT) |
API返回的整个JSON字符串,格式和API保持一致 (参看taobao.refund.get) |
索引
jdp_tb_refund`
(`seller_nick`,`jdp_modified`),
(`jdp_modified`),
(`seller_nick`,`modified`),
(`modified`)
商品
JDP_TB_ITEM
名称 |
类型 |
说明 |
num_iid |
NUMBER |
商品数字id |
nick |
VARCHAR |
卖家nick |
Approve_status |
VARCHAR |
商品上传后的状态。onsale出售中,instock库中 |
cid |
NUMBER |
商品类目ID |
has_showcase |
VARCHAR |
橱窗推荐,true/false |
has_discount |
VARCHAR |
支持会员打折,true/false |
created |
DATETIME |
商品创建时间 |
modified |
DATETIME |
商品修改时间 |
jdp_created |
DATETIME
|
数据推送的创建时间,1970年1月1日到现在的毫秒数 |
jdp_modified |
DATETIME
|
数据推送的修改时间,1970年1月1日到现在的毫秒数 |
Jdp_delete |
NUMBER |
0表示正常,1表示逻辑删除。当收到商品删除消息时,程序做逻辑删除 |
Jdp_hashcode |
VARCHAR |
Jdp用来做数据校验的字段 |
jdp_response |
MEDIUMTEXT(sqlserver是TEXT) |
API返回的整个JSON字符串,格式和API保持一致,但不包含商品描述字段 (参看taobao.item.get) |
索引
jdp_tb_item`
(`nick`,`jdp_modified`),
(`jdp_modified`),
(`nick`,`modified`),
(`modified`)
分销
JDP_FX_TRADE
名称 |
类型 |
说明 |
fenxiao_id |
NUMBER |
分销流水号,分销平台产生的主键 |
tc_order_id |
NUMBER |
主订单ID (经销不显示) |
status |
VARCHAR |
采购单交易状态 |
supplier_username |
VARCHAR |
供应商在来源网站的帐号名 |
distributor_username |
VARCHAR |
分销商在来源网站的帐号名 |
created |
DATETIME |
采购单创建时间 |
modified |
DATETIME |
交易修改时间 |
jdp_created |
DATETIME
|
数据推送的创建时间,1970年1月1日到现在的毫秒数 |
jdp_modified |
DATETIME
|
数据推送的修改时间,1970年1月1日到现在的毫秒数 |
Jdp_hashcode |
VARCHAR |
Jdp用来做数据校验的字段 |
jdp_response |
MEDIUMTEXT(sqlserver是TEXT) |
API返回的整个JSON字符串,格式和API保持一致 (参看taobao.fenxiao.orders.get) |
索引
jdp_fx_trade`
(`supplier_username`,`jdp_modified`),
(`jdp_modified`),
(`supplier_username`,`modified`),
(`modified`)
分销退款
JDP_FX_REFUND
名称 |
类型 |
说明 |
sub_order_id |
NUMBER |
子单id |
refund_create_time |
DATETIME |
退款创建时间 |
refund_status |
Number |
退款状态 |
supplier_nick |
VARCHAR |
供应商nick |
distributor_nick |
VARCHAR |
分销商nick |
modified |
DATETIME |
退款修改时间 |
jdp_created |
DATETIME
|
数据推送的创建时间,1970年1月1日到现在的毫秒数 |
jdp_modified |
DATETIME
|
数据推送的修改时间,1970年1月1日到现在的毫秒数 |
Jdp_hashcode |
VARCHAR |
Jdp用来做数据校验的字段 |
jdp_response |
MEDIUMTEXT(sqlserver是TEXT) |
API返回的整个JSON字符串,格式和API保持一致 (参看taobao.fenxiao.refund.get) |
索引
jdp_fx_refund`
(`supplier_nick`,`jdp_modified`),
(`jdp_modified`),
(`supplier_nick`,`modified`),
(`modified`)
天猫退款
JDP_TM_REFUND
名称 |
类型 |
说明 |
refund_id |
NUMBER |
退款单号 |
refund_status |
VARCHAR |
退款状态 |
refund_phase |
VARCHAR |
售中、售后 |
seller_nick |
VARCHAR |
卖家昵称 |
buyer_nick |
VARCHAR |
买家昵称 |
created |
DATETIME |
退款时间 |
modified |
DATETIME |
修改时间 |
jdp_created |
DATETIME
|
数据推送的创建时间,1970年1月1日到现在的毫秒数 |
jdp_modified |
DATETIME
|
数据推送的修改时间,1970年1月1日到现在的毫秒数 |
Jdp_hashcode |
VARCHAR |
Jdp用来做数据校验的字段 |
jdp_response |
MEDIUMTEXT(sqlserver是TEXT) |
API返回的整个JSON字符串,格式和API保持一致 |
索引
jdp_tm_refund`
(`seller_nick`,`jdp_modified`),
(`jdp_modified`),
(`seller_nick`,`modified`),
(`modified`)
天猫退货
JDP_TM_RETURN
名称 |
类型 |
说明 |
refund_id |
NUMBER |
退款单号 |
status |
VARCHAR |
退货状态 |
sid |
VARCHAR |
物流运单号 |
refund_phase |
VARCHAR |
售中、售后 |
created |
DATETIME |
退款时间 |
modified |
DATETIME |
修改时间 |
jdp_created |
DATETIME
|
数据推送的创建时间,1970年1月1日到现在的毫秒数 |
jdp_modified |
DATETIME
|
数据推送的修改时间,1970年1月1日到现在的毫秒数 |
Jdp_hashcode |
VARCHAR |
Jdp用来做数据校验的字段 |
jdp_response |
MEDIUMTEXT(sqlserver是TEXT) |
API返回的整个JSON字符串,格式和API保持一致 |
索引
jdp_tm_return`
(`status`,`jdp_modified`),
(`jdp_modified`)
有话要说