Java 응용 프로그램에서 Cassandra에 액세스하면 초 당 500 rows
을 삽입 할 수 있지만 50 rows
(실제로 업데이트 된 행은 존재하지 않음) 만 업데이트 할 수 있습니다.Insert는 Cassandra의 Update보다 10 배 빠릅니다. 정상입니까?
백개 필드를 업데이트하는 것은 한 필드를 업데이트하는 것만큼 빠릅니다.
난 그냥 CQL statements
Java 응용 프로그램에서 사용하십시오.
이 상황이 정상입니까? 신청서를 어떻게 개선 할 수 있습니까?
public void InsertSome(List<Data> data) {
String insertQuery = "INSERT INTO Data (E,D,A,S,C,......) values(?,?,?,?,?,.............); ";
if (prepared == null)
prepared = getSession().prepare(insertQuery);
count += data.size();
for (int i = 0; i < data.size(); i++) {
List<Object> objs = getFiledValues(data.get(i));
BoundStatement bs = prepared.bind(objs.toArray());
getSession().execute(bs);
}
}
public void UpdateOneField(Data data) {
String updateQuery = "UPDATE Data set C=? where E=? and D=? and A=? and S=?; ";
if (prepared == null)
prepared = getSession().prepare(updateQuery);
BoundStatement bs = prepared.bind(data.getC(), data.getE(),
data.getD(), data.getA(), data.getS());
getSession().execute(bs);
}
public void UpdateOne(Data data) {
String updateQuery = "UPDATE Data set C=?,U=?,F........where E=? and D=? and A=? and S=? and D=?; ";
if (prepared == null)
prepared = getSession().prepare(updateQuery);
......
BoundStatement bs = prepared.bind(objs2.toArray());
getSession().execute(bs);
}
스키마 :
Create Table Data (
E,
D,
A,
S,
D,
C,
U,
S,
...
PRIMARY KEY ((E
D),
A,
S)
) WITH compression = { 'sstable_compression' : 'DeflateCompressor', 'chunk_length_kb' : 64 }
AND compaction = { 'class' : 'LeveledCompactionStrategy' };
또 다른 시나리오 :
내가 다른 카산드라 클러스터를 액세스하기 위해 동일한 응용 프로그램을 사용했다. 그 결과는 달랐다. UPDATE는 INSERT만큼 빠릅니다. 하지만 초당 5 개의 행만 INSERT/UPDATE합니다. 이 카산드라 클러스터는 GCE에서 실행되는 DataStax Enterprise입니다 (Google Cloud Launcher에서 기본 DataStax Enterprise를 사용했습니다). 그래서 일부 구성이 이유라고 생각합니다. 그러나 나는 그들이 무엇인지 모른다.
여기 테이블의 스키마도 게시 할 수 있습니까? – markc