Cassandra慢慢插入一些表

时间:2014-01-23 16:44:39

标签: java performance insert cassandra

我在使用java客户端将数据插入cassandra 2.0.3时遇到问题。 我正在使用java api从文本文件中填充一些表。对于某些表来说,这是非常快的,对于一些表来说非常慢。我不知道为什么,因为结构非常相似,并且没有创建大量的索引。以下是一些表定义:

  CREATE TABLE partner (primary_uuid uuid, 
       financial_institution varchar, 
       partition_key int, 
       report_date timestamp, 
       change_status int, 
       partner_id varchar, 
       name varchar, 
       surname varchar, 
       seat_country_code
       risk_country_code varchar, 
       legal_form varchar,
       PRIMARY KEY (partition_key, partner_id));
   CREATE INDEX ON partner(change_status);
   CREATE INDEX ON partner(partner_id);
   CREATE INDEX ON partner(seat_country_code);
   CREATE INDEX ON partner(risk_country_code);
   CREATE INDEX ON partner(legal_form);

将数据插入此表并不是很快但可以接受(我猜这是因为索引)

表“交易”

 CREATE TABLE deal (primary_uuid uuid,
       financial_institution varchar, 
       partition_key int, 
       report_date timestamp, 
       change_status int,
       deal_id varchar, 
       deal_type varchar,
       risk_type int,
       amount float,
       currency_code varchar,
        PRIMARY KEY (partition_key, deal_type, deal_id));
  CREATE INDEX ON deal(change_status);
  CREATE INDEX ON deal(deal_id);

将数据插入此表非常慢,有时会导致cassandra崩溃(或至少抛出异常)

见表3:

  CREATE TABLE allocated(primary_uuid uuid,
       financial_institution varchar, 
       partition_key int, 
       report_date timestamp, 
       change_status int,
       report_name varchar,
       deal_type varchar,
       risk_type int,
       currency_code varchar,
       ....more columns
       legal_form varchar,
       seat_country_code varchar,
       partner_id varchar,
       PRIMARY KEY (partition_key, report_name, primary_uuid));
   CREATE INDEX ON allocated(financial_institution);
   CREATE INDEX ON allocated(seat_country_code);
   CREATE INDEX ON allocated(legal_form);
   CREATE INDEX ON allocated(deal_type);

虽然这个表比其他表复杂得多,而且我在其上设置了4个索引,但插入此表的速度非常快,我可以在短时间内插入数千条记录。此外,它比“伙伴”表大约100倍。 我不明白为什么插入“交易”会定期崩溃我的应用程序。 结构简单,复合键与“已分配”结构相同,只有2​​个索引。 Java代码也一样,我对所有这些代码都使用了BoundStatements。

我在这里做错了什么?

0 个答案:

没有答案