【问题标题】:High Concurrency Counter (For Credit Management)高并发计数器(用于信用管理)
【发布时间】:2011-02-24 12:13:34
【问题描述】:

我想知道最好的方法来提高速度和准确性,这是我们的应用程序所做的:

  1. 检查信用是否为 1 或以上(预检查)
  2. 处理作业(需要一点时间)
  3. 作业完成,检查是否还有学分来完成作业(学分计数 1 或以上)
  4. 扣分
  5. 完成工作

此过程重复了 50,000 多次(线程化,使用队列系统),当前使用 mysql 数据库来处理计数器。

除了mysql数据库风格的计数器,还有没有更好的解决方案?

我在想这样的架构:

user_id | credit_count

这是我应该使用的最佳架构吗? 并且线程只是锁定行而不是扣除信用,而不是释放下一个线程的行。

【问题讨论】:

    标签: mysql counter


    【解决方案1】:

    不确定您在该过程中使用了哪种技术。

    您可以以某种方式累积进程语言中的计数,并且不时地将计数器转储到数据库中。 您不会增加每个请求的计数,而是每 n 个请求...

    【讨论】:

    • 应用程序在 JAVA 中,并且还在其他服务器上运行它的多个实例。在开始该过程之前了解用户是否有任何积分也很重要。
    【解决方案2】:

    看过memcached吗?如果您想坚持使用 mysql,您可以将表更改为内存表。

    还有read this

    【讨论】:

    • 是的,我以前使用过 memcached,但我觉得它在我的应用程序中并不好,因为它需要保持数据存储中的用户信用数量(我们可以在重新启动时释放它等) .. 同样在一个线程应用程序中,我看不到这个工作,因为它会导致它不正确地计数。
    猜你喜欢
    • 2017-10-22
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多