将数据插入Cassandra

时间:2013-06-17 21:31:07

标签: java cassandra

我要将数据(网络数据包)插入 Cassandra 数据库中!

不幸的是,我的应用程序需要大约1分钟才能插入10000个数据包!

我正在寻找是否有人可以帮助我操作java多线程概念来加速插入!这是我的代码:

PcapPacketHandler<String> jpacketHandler;
jpacketHandler = new PcapPacketHandler<String>() {
    GestionPacketDAO g1;
    int row=0;

    public void nextPacket(PcapPacket packet, String user) {
        row++;

        String s = packet.toHexdump();

        try {
            g1 = new GestionPacketDAO();                 
            g1.Insert(s, row);// Insert is the function which inserts data into  database
        } 
        catch (InvalidRequestException exg) {
            Logger.getLogger(AccueilInsertion.class.getName()).log(Level.SEVERE, null, exg); 
        } 
        catch (TException exg) {
            Logger.getLogger(AccueilInsertion.class.getName()).log(Level.SEVERE, null, exg);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

常见的模式是:

  • 使用可能有10个线程的ThreadPoolExecutor。
  • 使用执行连接池的客户端库(例如Astyanax或DataStax CQL3 java驱动程序)。确保至少有与线程一样多的连接。
  • 通过固定大小的队列(例如ArrayBlockingQueue)返回ThreadPoolExecutor
  • 生成器(在您的情况下是nextPacket函数)调用ThreadPoolExecutor.execute,它将Runnable添加到队列中。您需要通过处理RejectedExecutionException来适当地处理队列。您可以睡觉并阻止读取数据包或丢弃数据包或其他替代方案。

另一种方法是让多个线程运行您的数据包处理程序(如果可能)。每个人都可以拥有自己的Cassandra连接并直接写入。如果你能做到这一点会更有效率。