【问题标题】:Real time checking of database to send command实时检查数据库以发送命令
【发布时间】:2011-08-25 12:10:05
【问题描述】:

我正在处理电话系统的用户帐户,一旦用户的余额达到零,我需要断开用户的连接。

  • 用户发起呼叫
  • 当前余额已检索
  • 计算电话价格并计算出用户可以购买多少分钟
  • 然后将会话挂起时间存储在数据库中

我需要轮询数据库(每秒?)以了解会话挂断时间是否为 =

关于经常轮询数据库的任何建议,我目前使用 MySQL,但我愿意改变。

cron 不会经常运行。因为我会按分钟计费,所以我需要确保这个脚本的时间是准确的。

我正在查看 node.js 来完成这项任务,从未使用过 node- 是否合适? 是否值得使用数据库的发布/订阅功能? (不能冒任何数据丢失的风险,因为这意味着用户可以永远继续打电话)

感谢任何建议。

P.S 一切都将在服务器端。将没有前端来触发请求。

【问题讨论】:

    标签: mysql node.js real-time


    【解决方案1】:

    请注意,您可能没有以正确的方式处理此问题。据我所知,电信公司通常为计费所做的工作是对正在更改的数据进行内存快照,并定期批量更新以根据需要保留所述数据。

    在数据库术语中,将其视为使用使用内存引擎的代理表工作,定期开始 / 重命名 mem_table / 创建新的 mem_table / 提交,然后使用 old_mem_table / 删除 old_mem_table / 提交开始 / 更新 static_table .

    可能发生的最糟糕的情况是丢失几分钟的帐单。这样做的好处是,它可以让硬盘驱动器免于进行无休止的读/写(考虑到它们面临的吞吐量,它们无论如何都做不到)。

    特别是对于您的(node.js)问题,为什么不使用 setInterval()?

    【讨论】:

    • 我面临的问题是用户的预付信用额度接近于零。一旦达到,我需要手动断开呼叫,为此我需要发送一个 REST 命令。我不太听从你的回答,但是如果我从记忆中丢失一个呼叫 ID,这个呼叫可能会永远持续下去。我不会以任何方式向用户收取超过其预付金额的费用。
    • 重新回答,我只是建议(最后一行)您直接使用 javascript 进行查找。关于无限调用,可以这样想:如果数据库服务器崩溃,所有调用可能无论如何都会被切断;最糟糕的是,少数顾客会花一两个小时与津巴布韦的朋友交谈。您的硬盘将不胜感激。
    猜你喜欢
    • 2011-03-22
    • 2011-05-07
    • 1970-01-01
    • 2015-05-22
    • 2021-12-06
    • 2021-08-06
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多