我在使用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。
我在这里做错了什么?