카산드라에 대량의 레코드 (한 번에 5 백만 개 이상)를 기록하려고합니다. 탭으로 구분 된 파일에서이 파일을 읽고 있으며 executeAsync를 사용하여 Cassandra로 가져옵니다. 우리는 훨씬 더 작은 데이터 세트 (~ 330k 레코드)를 사용하여보다 보편화되었습니다. 최근까지 우리 스크립트는 자동으로 약 65k 레코드에서 가져 오기를 중지했습니다. RAM을 2Gb에서 4Gb로 업그레이드 한 이후로 가져 오는 레코드 수가 두 배가되었지만 아직 모든 레코드를 성공적으로 가져 오지 못했습니다. 많은 수의 쓰기를 수행 할 때 카산드라와 관련된 문제가 발생했습니다.
이
우리가 현재 실행중인 프로세스의 예는 다음과 같습니다$cluster = \Cassandra::cluster()->withContactPoints('127.0.0.1')->build();
$session = $cluster->connect('example_data');
$statement = $session->prepare("INSERT INTO example_table (example_id, column_1, column_2, column_3, column_4, column_5, column_6) VALUES (uuid(), ?, ?, ?, ?, ?, ?)");
$futures = array();
$data = array();
foreach ($results as $row) {
$data = array($row[‘column_1’], $row[‘column_2’], $row[‘column_3’], $row[‘column_4’], $row[‘column_5’], $row[‘column_6’]);
$futures = $session->executeAsync($statement, new \Cassandra\ExecutionOptions(array(
'arguments' => $data
)));
}
우리는이 공간이 부족 힙에 다운이 의심
:
DEBUG [SlabPoolCleaner] 2017-02-27 17:01:17,105 ColumnFamilyStore.java:1153 - Flushing largest CFS(Keyspace='dev', ColumnFamily='example_data') to free up room. Used total: 0.67/0.00, live: 0.33/0.00, flushing: 0.33/0.00, this: 0.20/0.00
DEBUG [SlabPoolCleaner] 2017-02-27 17:01:17,133 ColumnFamilyStore.java:854 - Enqueuing flush of example_data: 89516255 (33%) on-heap, 0 (0%) off-heap
우리가 표 이 데이터를 삽입하는 것은 다음과 같습니다 :
CREATE TABLE example_data (
example_id uuid PRIMARY KEY,
column_1 int,
column_2 varchar,
column_3 int,
column_4 varchar,
column_5 int,
column_6 int
);
CREATE INDEX column_5 ON example_data (column_5);
CREATE INDEX column_6 ON example_data (column_6);
우리는 배치 방법을 사용하려고 시도했지만 b Cassandra 프로세스가 높은 CPU 사용률 (~ 85 %)에서 실행되도록하기 때문에 여기서는 적절하지 않습니다.
우리는 최신 버전의 DSE/Cassandra를 저장소에서 사용할 수 있습니다.
감사합니다. @Chris, 우리는 현재 잘 작동하고 있습니다. 쓰로틀 링에 관해서는,이 용도로 활용할 수있는 DataStax PHP 드라이버에 내장 된 것이 있습니까? – deano23
아니, 나는 충분히 비동기 메서드를 처리하는 좋은 방법을 알고 PHP에 익숙하지 않다. 아마도리스트에 선물을 넣고 목록이> 1000이거나 첫 번째 것을 꺼내서'get'을하면 항상 1000 개 정도의 비행을 할 수 있습니다. 그런 다음 성능 수치를 기반으로 해당 수치를 조정할 수 있습니다 (이러한 소형 시스템에서는 낮을 수 있음). –
크리스 고맙습니다. 매우 도움이됩니다. – deano23