多个站点向一个站点发送数据

2014-08-18 21:03:44 +08:00
 magine
最近在写一个工程,基本功能是老师发布试卷到网关上运行的站点,学生用app获取网关上的试卷,答题后把答案发送到网关,网关压缩数据分包(暂时计划使用json)发送给总服务器,总服务器会做剩余处理。
预计一个网关为100间教室提供服务,每间教室60个学生,每天提交3份答案,每份答案大小100个字符。(总计)
主要有两点疑问:
如何防止访问超时。(楼主之前写过一个站点可以用xls文件更新数据库,但是当xls超过500行时由于数据量过大就会等待响应超时,这次发送这种大批量数据,也是相当担心超时问题)
除了json/xml还有哪些可以替代的数据交换方案,如果用json有没有什么分包方案?
3243 次点击
所在节点    Django
6 条回复
shiny
2014-08-18 21:06:47 +08:00
这个问题理解起来很费劲,好像使用异步队列能解决。
akira
2014-08-18 23:20:35 +08:00
最坏的情况下,也就是6000个并发,每个链接提交100个字符, 等于600kb的数据。这个项目的难点根本不在数据入库的这里,而是在前面的gateway。

如果是我设计的话,会设计成多个网关而不是一个,收到答案直接存本地文件或者干脆就直接丢内存,后面再来做处理提交到后端处理服务器。

至于数据交换格式,那根本无伤大雅,随便你喜欢。
Actrace
2014-08-19 00:33:58 +08:00
问题的根源是服务端性能.
从架构上考虑,如果网关没有什么负载,那么瓶颈就在于"总服务器".
但是实际情况可能更加复杂.你选择的处理语言,处理方式,数据库类型,甚至优化有没有做好,在相同的硬件上会体现出完全不同的负载能力.

理论上数据库对批量查询会做出很好的处理.我感觉批量提交应该不是卡的根源~
难道你用的是windows服务器?
jsjscool
2014-08-19 14:08:37 +08:00
500行超时……应该是服务端处理的问题。平时用PHPExcel处理文件上万行都很轻松。用户上传数据还可以选择csv格式。不过建议你用json。另外6000个算比较大的并发,可以考虑负载均衡。或者协调同学们上传作业的时间,避开高峰。
magine
2014-08-19 16:24:44 +08:00
@shiny
@akira
@Actrace
稍微追加了一下内容。
其实是想问一下json分包是手动写分包方案,还是说Django有分包的模块。
magine
2014-08-19 16:37:07 +08:00
@jsjscool

第一次写站点,可能真有写得不好的方,所以稍微说一下我的做法,求斧正:
先上传xls文件存入/tmp
按行读取数据(每行14列),存入字典。
对于每一次行读入:首先,查看‘类型’是否已存在,否则创建新‘类型’;然后,新建‘设备’,外键指向新建或已存在的‘类型’;其间会记录新建的‘类型’和‘设备’。
读到xls行尾结束返回http。

另外给一下代码链接(太长了放帖子里影响观看),不过是Django,嫌麻烦不看也可以啦~
http://paste.ubuntu.com/8086908/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/128614

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX