首页 新闻 会员 周边 捐助

查询代理接口的思路

0
悬赏园豆:100 [已解决问题] 解决于 2019-01-29 10:28

最近需要实现一个查询代理的接口,业务场景如下:
1、生产环境下有许多设备,每台设备每天大概能产生30W条数据,大概有40个设备,每天大概1000W条结构化数据,存储在数据库中;
2、产生的业务数据需要提供查询接口,为第三方提供查询服务,例如根据设备编号+时间范围、根据时间范围等进行查询,每次范围0~10W条左右(最多不超过10W,约束条件);

问题:需要提供一个高效、方便的接口,支持多客户并发访问,满足上万条数据的返回,尽量实时。

初步思路:
A、http、websevices对返回结果集的有限,暂时不考虑;

B、制定交互协议,通过TCP/IP,以短链接的形式进行交互,每次查询时,需要提供一个UUID作为任务编号,代理接口组织好数据后,通过任务编号返回;

C、制定协议,接收客户端的查询请求,为每个客户端配置一个ftp帐号,数据组织好后,推送到ftp,然后再消息通知客户端,也是采用短链接方式交互;

D、也见过专业的接口服务,除了提供查询协议,也提供相应的jar,通过jar的引用,客户端进行傻瓜式的调用即可

请问:
1、不知大家是否有其他好的思路;
2、针对提供jar包的方式,是否能提供一些思路;

我是豆豆的主页 我是豆豆 | 初学一级 | 园豆:112
提问于:2019-01-23 20:21
< >
分享
最佳答案
0

首先是存储,这个可以很明显的做到分表,一个设备一个。另外还可以按周(月)进行拆分。这样的话,大概一个表的极限数据就是900w。这是存储的设计,比较简单。

 

再说查询:

关于A,可能你是有误解,我个人反而建议用Http提供API

B、C方案核心都是异步任务+通知,及时性不佳。

D,针对http请求包装一个Client是很容易的事情,主流的sdk大都是这个玩法。

 

关于http请求10w条数据,此处需要评估下你的单条数据大小。如果可以,把限制做成1w条,然后对数据进行压缩后下发。

收获园豆:100
幻天芒 | 高人七级 |园豆:37207 | 2019-01-23 21:27

数据存储这块跟你思路差不多,采用分区表的方式进行存储,问题不大;
我现在没有想清楚的是,采用那种方式提供接口,就是想支持多并发,并且方便客户端调用,你说的也是一种思路,谢谢啦。

我是豆豆 | 园豆:112 (初学一级) | 2019-01-24 09:53

@我是豆豆:因为你要及时性,那这个时候单次的请求没必要搞那么大。如果要大批量下载数据,那就是导出相关的功能了。

幻天芒 | 园豆:37207 (高人七级) | 2019-01-24 13:47

@幻天芒: 谢谢回复,你的意思就是根据请求的范围去查询,查询完毕后,通知请求方进行下载即可,是吧。

我是豆豆 | 园豆:112 (初学一级) | 2019-01-25 09:55

@我是豆豆: 是的,这是不要求及时性,大批量下载的玩法。

幻天芒 | 园豆:37207 (高人七级) | 2019-01-25 12:56
其他回答(2)
0

http api 提供查询服务,限制条数,返回json,返回二进制流都可以

client sdk提供接口,可以使用google proto 类似这种二进制协议来通信,针对你这种一次性要返回10万+条数据的,可以考虑tcp client 和server建立链接后,查询条件发送到server,server可以分页到db查询,比如每次1w 条,然后多次出现,分配tcp send给client。使用sdk也可以做异步加载的优化,数据用到了,在请求server

主要看你使用场景,数据大小,和是否有必要一次性必须loaded 10w+数据。

czd890 | 园豆:14488 (专家六级) | 2019-01-24 15:26

感谢回复,我也在考虑结果集采用分批次的方式返回给请求方。

支持(0) 反对(0) 我是豆豆 | 园豆:112 (初学一级) | 2019-01-25 09:57
0

当天表 历史表 就行了 历史表都是废数据,,大部分只看当天的

Fan丶 | 园豆:336 (菜鸟二级) | 2019-01-25 14:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册