`

帮助中国移动设计10086的排队小模块

阅读更多

1 引言

今天发现了伍迷的《大话数据结构》系列,应该不错,从第一篇开始阅读。因为之前就阅读过他的《大话设计模式》,觉得通俗易懂,而且从浅入深,结合实际情况,是一本不可多得的好书。

读到《《大话数据结构》第1章 数据结构绪论 1.2 你数据结构怎么学的?》这篇的时候,就出现了一个小的场景。他的学生小菜在工作中被分配了一个任务,完成一个客户排队模块的代码。小菜就建立一张表,保存每次的队列内容,客服空闲了,就拿出最早插入一条来给客服处理。结果被项目经理批了一顿,说他没有学过数据结构,用数据库干什么。小菜回去就改成了一个数组,不用数据库了,怕溢出就设置数组长度为100。小菜还是怕有问题,就请假了她的表哥大鸟。大鸟表哥还是那句话“你的数据结构怎么学的?”,然后指点小鸟改用数据结构中的【队列】来实现,就不用考虑溢出,也不用考虑处理一条请求之后,需要移动原队列数据的位置。

在博文的回复中,金色海洋就提出了:

客户排队模块?是什么场景什么需求呢?
估计弄来弄去还是离不开数据库。

伍迷回复到:

@金色海洋(jyk)
你不妨想想10086打进去后,听音乐等待客服的情景。是你,你打算如何实现?

就这样,就引出了今天的题目:“帮助中国移动设计10086的排队小模块”。

2 正文

那么到底这个排队小模块该如何设计呢?用不用数据库呢?如何用数据库呢?什么时候用呢?用不用有什么区别呢?在下面我会提出自己的一些小观点,还请各位看完之后,踊跃提出自己的见解,给出更好的答案。那么,我先抛砖引玉了。(以下都是我的个人观点,有偏颇的地方,还请各位及时指出,本人先谢过了)

按照伍迷文中的意思,以及他的答复,我猜测是他的意思是不需要数据库的辅助,直接使用一个队列Queue,利用队列的特点,先进先出,没有空间限制,不用检查溢出。进来一个请求就入队,如果有客服空闲,就出队一个请求,交给空闲的客服进行处理。

我想用到客服系统的用户,肯定是服务的对象量上来了,不是搞几个电话,每个人守着接电话就可以解决的了,需要一个系统来协调这些请求。但是请求的量大了的话,都放在内存的一个队列中,内存占用会越来越多,就算能加内存估计也会不够用的吧。光从这点看,只用内存队列应该就满足不了实际需求了吧。

我觉得应该辅助以数据库。当然了,不是每进来一条都插入数据库,然后再取出来给空闲的客服,那么这样也太浪费了。不过我想,如果需要记录这些客服请求的详细信息的话,而且客服一般都需要客户最后进行评价,每条都记录也就在所难免了。

队列还是需要的,但是可以限制一个上限,让他不至于无限的扩大,超出上限的那些请求先进入数据库,然后再等队列元素不足上限的时候,取一些来填补到队列中。

当然也不是队列一有不足,就取一条出来,那么就和插入一条,然后取出一条没有区别了。是给队列设计一个最小值,小于最小值之后,就从数据库获取max-min条请求来进行处理。

但是我又想到,请求就算记录到数据库,也不能切断请求连接,因为客户还在等回复呢。切断了意味着还需要再次回拨回去,应该没有这么做的吧。客户等待的过程中,都是告诉客户坐席忙,然后让客户决定【继续等待】还是【挂断稍后再打来】,继续等待的就播放一段音乐给客户。所以继续等待的客户请求还是需要保存在队列中,否则没有办法继续通话了。

数据记录肯定是需要的,应该不会是在请求来了之后就记录吧,有可能会是在处理完毕之后,连带客户的评价,一起进入一个进行数据记录的队列,等待数据的持久化。当然,这就意味着,那些挂断的客户请求就丢失了,可能还是需要先记录的,处理之后,评价之后更新相应的信息。而且,在更新的时候,会检查是否存在之前的记录,如果存在就是更新操作,没有的话,就是插入操作,连带请求信息一起插入。

看来这些请求还是都在队列中的,但是一直都占用内存肯定也不是办法吧。应该有更好的解决方式。

我又想了一种,还是将请求分成两部分,一部分在内存的队列中,一部分估计还是要持久化到某种设备中的,然后需要内存维护一个未处理的请求列表,这个列表包含全部的请求,保存内存队列中的未处理请求和被持久化的未处理请求。如果当前请求都处理完毕,或者当前未处理请求小于一个数值,就从持久化的未处理请求中,激活一些放入内存队列中。

当然,还需要考虑多台服务器的情况,分布式的数据存放和共享。共享一个请求队列,和持久化队列。

 

3 结论

没有什么结论,上面就是我想到的一些办法和遇到的一些疑惑,有哪位可以帮助我解释一下呢?大家也可以提出自己的见解,我们一起来完善这样一个模块。

2
4
分享到:
评论
1 楼 nicegege 2011-11-09  
小弟 学习了

相关推荐

    中国移动-10086数据分析培训教材

    标题“中国移动-10086数据分析培训教材”表明,本教材旨在教授与中国移动10086客户服务中心相关联的数据分析知识。描述中提到的“中国移动客户服务中心数据分析与报告”则突出了教材的核心内容,包括分析中国移动...

    十三、模块化程序设计.pdf

    本实例要求通过学习LCD1602液晶的模块化程序设计,帮助读者掌握模块化程序设计的基本方法。这需要读者了解并应用AVR单片机的编程接口,因为AVR单片机广泛用于嵌入式系统开发,并且是实现模块化设计的常用平台。 ...

    4g模块电路设计pcb

    4G模块电路设计是现代通信技术中的一个重要环节,特别是在物联网(IoT)和移动设备领域。PCB(Printed Circuit Board)则是实现这种设计的基础,它承载并连接了所有电子元件,确保整个系统的正常运行。在设计4G模块...

    基于Android系统的移动定位模块设计与实现.pdf

    基于Android系统的移动定位模块设计与实现 本文主要介绍基于Android系统的移动定位模块设计与实现,涵盖了移动定位模块的概念、设计原理、Android平台下的实现方法等方面的内容。 一、移动定位模块概述 移动定位...

    中国移动GSM模块M6312设计指南

    M6312 产品规格书_20180827155502_60154 M6312 AT命令用户使用手册_20180827155524_83501 M6312 参考设计_V1_20180827155811_94724 M6312 通信流程示例_20180827155647_94676

    中国移动 NGBOSS2-BOSS(V4.5)业务规范

    《中国移动 NGBOSS2-BOSS(V4.5)业务规范》是针对中国移动新一代业务运营支撑系统(Next Generation Business Operation Support System,简称NGBOSS)的重要文档,版本为V0.9。NGBOSS是中国移动为了提升其业务运营...

    10086 语音卡的设计C语言实现的

    10086是中国移动的客户服务热线,其语音服务系统涉及到电话通信的协议。要实现这个项目,需要了解电话通信的基本原理,如公共交换电话网络(PSTN)、数字信号处理(DSP)技术,以及可能涉及的通信协议,如SS7...

    Android 桌面图标,点击进入相应的网站。(仿移动门户10086)-IT计算机-毕业设计.zip

    本项目名为“仿移动门户10086”,它借鉴了中国移动10086官网的服务模式,旨在为用户提供便捷的网络服务入口。通过分析这个应用的源码,我们可以深入理解Android应用开发的基本流程和技术要点。 首先,我们要了解...

    桌面图标,点击进入相应的网站,仿移动门户10086_Android源码.zip

    在这个项目中,图标设计可能参照了中国移动10086的官方标志,以便用户能够直观地识别出这是与10086相关的服务。 3. **点击事件处理**:当用户点击桌面上的图标时,Android系统会触发相应的Intent,这个Intent会启动...

    模块化移动机械手臂设计.pdf

    "模块化移动机械手臂设计.pdf" 本文主要介绍了模块化移动机械手臂的设计,旨在解决传统移动机械手臂存在的问题,提高其适用性和准确度。通过对移动机械手臂的结构设计和模块化设计,实现了机械手臂的模块化和标准化...

    模拟排队买票程序设计报告

    《模拟排队买票程序设计》 本程序设计旨在模拟现实生活中购票排队的过程,采用C语言编写,具有入队(EnQueue)和出队(DeQueue)等操作,以实现用户在虚拟环境下的购票体验。程序的数据存储和操作逻辑充分考虑了...

    关于中国移动的计费系统模块

    本系统采用struts+spring+hibernate架构,重在讲述三者结合在一起的应用开发,所有源程序都 有详细的注释,供入门者学生参考,未经作者允许不得用于...程序只是整个系统中的一个模块,用于和各位程序爱好者交流之用。

    中国移动物联网业务支撑系统方案建议书.doc

    中国移动物联网业务支撑系统方案建议书是基于对中国移动物联网业务的需求分析和市场研究,旨在提供一个全面的解决方案,帮助中国移动更好地发展物联网业务。该方案涵盖了业务支撑系统的各个方面,包括运营商门户、...

    J2ME移动计费支付模块

    J2ME移动计费支付模块是为移动设备设计的一种客户端应用,主要用于实现移动支付功能。在J2ME环境中,客户端的实现涉及到多个关键模块,包括网络通信、用户界面、安全等,通过相互协作来完成支付流程。 首先,客户端...

    手持式移动学习终端故障模块自修复系统设计

    为有效解决移动学习终端继发故障频繁、稳定耐受程度受限等问题,设计新型手持式移动学习终端故障模块自修复系统。在IOS客户端的支持下,连结修复扩束器、修复调试模块两个主要执行设备,实现新型修复系统的硬件运行...

    SAP中国移动项目建议书.pdf

    该建议书涵盖了SAP公司对中国移动(香港)有限公司业务状况、系统需求及管理目的的理解,并提出了mySAP软件及SAP服务,以帮助贵方建立企业管理信息系统,提高公司的市场竞争能力和生存能力。 SAP mySAP管理信息系统...

    中国移动logo(透明/矢量)

    以前在网上搜中国移动的矢量logo图搜不到,最近从朋友那弄到一个,分享给需要的人

    通信行业研究周报:中国移动首次公布5G前传方案,25G前传光模块需求量有望大幅提升.zip

    本周报聚焦于中国移动公布的5G前传方案,这一方案的发布对于5G基础设施建设具有里程碑式的意义,同时也对25G前传光模块市场产生了深远影响。 首先,5G前传网络是5G无线接入网的重要组成部分,它连接了基站与中央...

    当代农民画移动博物馆APP模块设计.pdf

    当代农民画移动博物馆APP模块设计.pdf

    Android平台下的应用英语移动学习软件模块设计.pdf

    【Android平台下的应用英语移动学习软件模块设计】 随着现代教育技术的发展,移动学习已经成为校园教育的重要组成部分,特别是在英语学习领域。Android平台凭借其广泛的使用率和开放性,成为了开发移动学习应用的...

Global site tag (gtag.js) - Google Analytics