楼主: paradise2009

我们常见的银行排队系统在数据库方面设计方面怎么处理取号和呼叫问题呢?

[复制链接]
论坛徽章:
131
乌索普
日期:2017-09-26 13:06:30马上加薪
日期:2014-11-22 01:34:242014年世界杯参赛球队: 尼日利亚
日期:2014-06-17 15:23:23马上有对象
日期:2014-05-11 19:35:172014年新春福章
日期:2014-04-04 16:16:58马上有对象
日期:2014-03-08 16:50:54马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
11#
发表于 2008-7-30 21:29 | 只看该作者
原帖由 paradise2009 于 2008-7-30 17:59 发表


你没有耐心看吧。我就是把可能在银行办理业务过程中的一些逻辑想来了下,看它在数据库层面是怎么实现的。好像没有什么表述不清楚的把~

您这就是自己拍拍脑袋乱想

使用道具 举报

回复
论坛徽章:
7
月度精华徽章
日期:2008-08-01 02:15:55奥运会纪念徽章:现代五项
日期:2008-08-08 14:56:30奥运会纪念徽章:跳水
日期:2008-08-15 09:58:482009新春纪念徽章
日期:2009-01-04 14:52:28生肖徽章2007版:蛇
日期:2009-01-17 14:39:46生肖徽章2007版:猪
日期:2009-01-31 16:18:19生肖徽章2007版:猴
日期:2009-08-30 22:57:30
12#
发表于 2008-7-30 23:30 | 只看该作者
1、倒不是一个简单的FIFO队列
2、是一个阻塞式的FIFO队列,当队列为空时,所有的读出操作都被阻塞。
3、读出操作对应服务,写入操作对应客户拿号

使用道具 举报

回复
论坛徽章:
350
2006年度最佳版主
日期:2007-01-24 12:56:49NBA大富翁
日期:2008-04-21 22:57:29地主之星
日期:2008-11-17 19:37:352008年度最佳版主
日期:2009-03-26 09:33:53股神
日期:2009-04-01 10:05:56NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA季后赛大富翁
日期:2009-06-16 11:48:01ITPUB年度最佳版主
日期:2011-04-08 18:37:09ITPUB年度最佳版主
日期:2011-12-28 15:24:18ITPUB年度最佳技术原创精华奖
日期:2012-03-13 17:12:05
13#
发表于 2008-7-30 23:39 | 只看该作者
生产者,消费者问题,+FIFO!

使用道具 举报

回复
论坛徽章:
5
开发板块每日发贴之星
日期:2007-12-02 01:04:50生肖徽章2007版:兔
日期:2008-01-02 17:35:53生肖徽章2007版:虎
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:53奥运会纪念徽章:柔道
日期:2008-10-24 13:23:17
14#
发表于 2008-7-31 14:25 | 只看该作者
原帖由 paradise2009 于 2008-7-30 18:05 发表



对不起。我太懂。这个FIFO的队列在设计上大体是怎么实现的呢 ?


用Vector就可以实现了:
package com.bhan;

import java.text.DecimalFormat;
import java.util.Vector;

/**
* 排号(FIFO)队列.
* @author lzan
*
*/
public class Sequence
{
    /** 起始号码 */
    public final static int NUM_START = 1;

    /** 号码模板 */
    public final DecimalFormat template = new DecimalFormat("000");

    /** 队列已空*/
    public final static String ERROR_SEQUENCE_EMPTY = "-1";

    private int index = NUM_START;

    private Vector<String> vector = new Vector<String>();

    /**
     * 加入队列
     * @return
     */
    public synchronized String add()
    {
        String strNum = template.format(index++);
        vector.add(strNum);
        return strNum;
    }

    /**
     * 插入队列
     * @param index
     * @param strNum
     * @return
     */
    public synchronized void insert(int index, String strNum)
    {
        if (vector.size() <= index)
        {
            vector.add(strNum);
        }
        else
        {
            vector.add(index, strNum);
        }
    }

    /**
     * 取走队列的第一个元素
     * @return
     */
    public synchronized String remove()
    {
        if (vector.size() == 0)
        {
            return ERROR_SEQUENCE_EMPTY;
        }
        return vector.remove(0);
    }

}

使用道具 举报

回复
论坛徽章:
350
2006年度最佳版主
日期:2007-01-24 12:56:49NBA大富翁
日期:2008-04-21 22:57:29地主之星
日期:2008-11-17 19:37:352008年度最佳版主
日期:2009-03-26 09:33:53股神
日期:2009-04-01 10:05:56NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA季后赛大富翁
日期:2009-06-16 11:48:01ITPUB年度最佳版主
日期:2011-04-08 18:37:09ITPUB年度最佳版主
日期:2011-12-28 15:24:18ITPUB年度最佳技术原创精华奖
日期:2012-03-13 17:12:05
15#
发表于 2008-7-31 17:27 | 只看该作者
靠,还用什么vector啊, JAVA直接就有QUEUE这样的容器啊!

使用道具 举报

回复
论坛徽章:
0
16#
 楼主| 发表于 2008-7-31 17:57 | 只看该作者
原帖由 Sky-Tiger 于 2008-7-31 17:27 发表
靠,还用什么vector啊, JAVA直接就有QUEUE这样的容器啊!


有容器怎么写阿。是不是和上面一样呢。确实需要一个产生号码和取走号码的方法。

使用道具 举报

回复
论坛徽章:
350
2006年度最佳版主
日期:2007-01-24 12:56:49NBA大富翁
日期:2008-04-21 22:57:29地主之星
日期:2008-11-17 19:37:352008年度最佳版主
日期:2009-03-26 09:33:53股神
日期:2009-04-01 10:05:56NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA季后赛大富翁
日期:2009-06-16 11:48:01ITPUB年度最佳版主
日期:2011-04-08 18:37:09ITPUB年度最佳版主
日期:2011-12-28 15:24:18ITPUB年度最佳技术原创精华奖
日期:2012-03-13 17:12:05
17#
发表于 2008-7-31 18:53 | 只看该作者
原帖由 paradise2009 于 2008-7-31 17:57 发表


有容器怎么写阿。是不是和上面一样呢。确实需要一个产生号码和取走号码的方法。

容器是一部分,还要提供锁机制啊!

当容器满的时候,往容器放东西的线程就应该阻塞,或是返回异常,或是抛弃队列中的一个东西来腾出地方,这个策略你自己定!

放东西线程每成功放置一个东西到容器中,都要发信号给取东西的线程!

当容器空的时候,取东西的线程就应该阻塞。

java的concurrency包中已经包含很多同步的机制,可以参考使用!

使用道具 举报

回复
论坛徽章:
350
2006年度最佳版主
日期:2007-01-24 12:56:49NBA大富翁
日期:2008-04-21 22:57:29地主之星
日期:2008-11-17 19:37:352008年度最佳版主
日期:2009-03-26 09:33:53股神
日期:2009-04-01 10:05:56NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA季后赛大富翁
日期:2009-06-16 11:48:01ITPUB年度最佳版主
日期:2011-04-08 18:37:09ITPUB年度最佳版主
日期:2011-12-28 15:24:18ITPUB年度最佳技术原创精华奖
日期:2012-03-13 17:12:05
18#
发表于 2008-7-31 18:56 | 只看该作者
楼主可以试试ThreadPoolExecutor JAVA5中带的。

使用ArrayBlockingQueue,后面的DiscardPolicy你可以自己选择!
其中很多策略和容器都有清晰的描述!

使用道具 举报

回复
论坛徽章:
5
开发板块每日发贴之星
日期:2007-12-02 01:04:50生肖徽章2007版:兔
日期:2008-01-02 17:35:53生肖徽章2007版:虎
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:53奥运会纪念徽章:柔道
日期:2008-10-24 13:23:17
19#
发表于 2008-8-1 10:17 | 只看该作者
原帖由 Sky-Tiger 于 2008-7-31 17:27 发表
靠,还用什么vector啊, JAVA直接就有QUEUE这样的容器啊!

原帖由 Sky-Tiger 于 2008-7-31 18:53 发表

容器是一部分,还要提供锁机制啊!

当容器满的时候,往容器放东西的线程就应该阻塞,或是返回异常,或是抛弃队列中的一个东西来腾出地方,这个策略你自己定!

放东西线程每成功放置一个东西到容器中,都要发信号给取东西的线程!

当容器空的时候,取东西的线程就应该阻塞。

java的concurrency包中已经包含很多同步的机制,可以参考使用!


老虎发言,果然雷人。。。单就QUEUE接口来说,试问一下,哪个方法可以满足插队的要求?前面说的很明白了,如果一个号码叫了后人不在,就把这个号码再插到后面十个(而非最后一个!)里去.....
即便使用了ArrayBlockingQueue,难道就不要对排号取号做个封装么,你总不好意思把一堆异常仍给排号机线程里处理吧?

还有锁机制,真的有必要吗?不知道你的提法是不是受ArrayBlockingQueue的引导,可关键的地方是,我们使用的这个容器并没有容量大小的限制。如果取号机设置了最多号码的限制(按照正常业务来说,每天可以处理的事务确实有个最大限度),如果有人变态,啪啪啪地取了一大堆号(前不久的新闻上就报过),那么是不是后来的人就不给号了呢?

放东西线程每成功放置一个东西到容器中,都要发信号给取东西的线程!————这点真感到纳闷,取号机每打印一个排号,都要通知柜台么?

简单就好......

[ 本帖最后由 bhan2008 于 2008-8-1 10:25 编辑 ]

使用道具 举报

回复
论坛徽章:
350
2006年度最佳版主
日期:2007-01-24 12:56:49NBA大富翁
日期:2008-04-21 22:57:29地主之星
日期:2008-11-17 19:37:352008年度最佳版主
日期:2009-03-26 09:33:53股神
日期:2009-04-01 10:05:56NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA季后赛大富翁
日期:2009-06-16 11:48:01ITPUB年度最佳版主
日期:2011-04-08 18:37:09ITPUB年度最佳版主
日期:2011-12-28 15:24:18ITPUB年度最佳技术原创精华奖
日期:2012-03-13 17:12:05
20#
发表于 2008-8-1 11:31 | 只看该作者
原帖由 bhan2008 于 2008-8-1 10:17 发表




老虎发言,果然雷人。。。单就QUEUE接口来说,试问一下,哪个方法可以满足插队的要求?前面说的很明白了,如果一个号码叫了后人不在,就把这个号码再插到后面十个(而非最后一个!)里去.....
即便使用了ArrayBlockingQueue,难道就不要对排号取号做个封装么,你总不好意思把一堆异常仍给排号机线程里处理吧?

还有锁机制,真的有必要吗?不知道你的提法是不是受ArrayBlockingQueue的引导,可关键的地方是,我们使用的这个容器并没有容量大小的限制。如果取号机设置了最多号码的限制(按照正常业务来说,每天可以处理的事务确实有个最大限度),如果有人变态,啪啪啪地取了一大堆号(前不久的新闻上就报过),那么是不是后来的人就不给号了呢?

放东西线程每成功放置一个东西到容器中,都要发信号给取东西的线程!————这点真感到纳闷,取号机每打印一个排号,都要通知柜台么?

简单就好......

如果插队,还叫什么FIFO?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表