2013-02-26 117 views
0

我正在寻求在java中设计多线程应用程序的算法,其中每个线程都将数据写入数据库。我想控制每秒写入数据库的记录数。java速率限制逻辑

应用程序获取RPS(记录每秒)参数并大致生成那么多负载。

+2

你做了什么工作?什么研究?你有什么尝试? – Gray 2013-02-26 19:28:24

+2

各种想法在这里:http://stackoverflow.com/questions/14638349/java-thottling-mechanism – irreputable 2013-02-26 19:28:48

+5

耶稣,这不是一个真正的问题?当然这个问题没有很好的定义,但这是所有问题的缺陷。它是发现问题的质量保证过程的一部分。这个特别的问题是相当合理的,读者基本上明白了什么是追求,读者可以提出有用的想法。 – irreputable 2013-02-26 20:16:46

回答

3

如果你可以使用外部库,番石榴有可能根本你问这是什么一个RateLimiter类:

速率限制器经常被用来限制在哪一些物理或逻辑资源被访问的速度。这与Semaphore相反,它限制了并发访问的数量而不是速率。

+0

这个解决方案可能会浪费机会 - 如果我每天被允许喝两杯啤酒,并且在头16个小时内我没有喝酒,我会失去1杯啤酒。目前还不清楚这对于OP的问题是好还是坏。 – irreputable 2013-02-26 19:37:29

+0

@irreputable他的要求不是很精确 - 这可能或可能不是一个好的解决方案。但它会是一种控制每秒写入db的记录数量的方法。 – assylias 2013-02-26 19:38:43

+1

谢谢Assylias。它有助于。那些关闭了我的问题,说它没有准确定义的人,应该远离访问这个线程。 – 2013-02-26 21:56:48

1

您可以创建一个允许对象的BlockingQueue并且有一个额外的帮助程序线程,该线程每秒向队列添加一次额外许可的RPS数量。写入线程会阻塞队列,并且不会写入,直到他们成功地从队列顶部弹出一个许可证。

+0

它可以在空闲时间累积许可证,然后在一秒钟内释放它们。它确实长时间工作。问题往往是要求不准确。 – irreputable 2013-02-26 19:31:59

+0

您可以添加许多功能,最大尺寸,以便在一秒钟内更均匀地分散负载,并提供大量创意。虽然问题不是那么具体! – Affe 2013-02-26 19:34:12