我正在编写一个在UDP上侦听传入消息的应用程序.我的主线程收到来自网络的消息后消息,并将它们中的每个传递给新线程以使用执行程序进行处理.
每个处理线程都会对其负责的消息进行所需的处理,并将其添加到所有处理线程之间共享的LinkedBlockingQueue.
然后,我有一个数据库工作线程,该线程按10000条消息块排空队列,并将消息块插入数据库.
由于消息的到达率可能很高(每秒超过20000条消息),所以我认为使用LOAD DATA INFILE会更高效.因此,该DB Worker线程如前所述耗尽队列,使用CSV格式创建一个包含所有消息的临时文件,然后使用另一个执行程序将创建的文件传递给另一个线程.这个新线程使用JDBC执行LOAD DATA INFILE语句.
在测试了我的应用程序之后,我认为性能不是很好,我正在寻找在多线程级别和DB访问级别都提高性能的方法.
我精确地说,我将MySQL用作DBMS.
谢谢
解决方法:
您需要确定为什么性能不佳.
例如.如果您将数据顺序写入数据库中,则很可能不需要多个线程,这很可能是您的瓶颈.不需要时使用多个线程的问题是,它增加了复杂性,这本身就是一项开销,并且比使用单个线程要慢.
我将尝试查看将数据加载到数据库中之后的所有工作,性能如何.即写入文件并丢弃它.