우리는 여전히 우리의 데이터 저장소에 대해 카산드라를 평가 중입니다. 매우 간단한 테스트로 약 100 바이트의 데이터에 해당하는 로컬 컴퓨터의 Keyspace1/Standard1 열 패밀리에 4 열 값을 삽입했습니다. 그럼 나는 줄 키로 할 수있는 한 빨리 그것을 읽었다. 160,000/초로 다시 읽을 수 있습니다. 큰.카산드라 랜덤 읽기 속도
다음으로 나는 X와 Y의 형태로 모든 키를 가진 비슷한 모든 레코드를 넣습니다. 여기서 X는 (1..10)이고 Y는 (1..100,000)이고 나는 임의 레코드를 쿼리했습니다. 성능은 초당 26,000 개의 쿼리로 떨어졌습니다. 이것은 여전히 우리가 지원해야하는 쿼리의 수 (약 1,500/초)입니다.
마지막으로 저는 1.1에서 10.10000까지 1 천만 개의 레코드를 넣었고 1000 만 개의 레코드 중 하나를 무작위로 쿼리했습니다. 초당 60 개의 쿼리에서 성능이 저하되 내 디스크가 미친 듯이 쓰러지고 있습니다.
또한 데이터의 하위 집합 인 3,000,000 ~ 3,001,000의 1,000 개 레코드를 요청하면 처음에는 천천히 반환 된 다음 캐시 할 때 초당 최대 20,000 개의 쿼리와 내 디스크 미쳤어.
사람들은 Cassandra에 수십억 개의 레코드를 저장하고 초당 5-6k를 가져 오는 것을 읽었지 만 10mil 레코드로는 그 근처에 갈 수 없습니다. 내가 뭘 잘못하고 있는거야? 기본값에서 변경해야 할 설정이 있습니까? 나는 overclocked Core i7 상자에 6gig의 램을 장착하고있어 그것이 기계라고 생각하지 않습니다.
여기에 키 행을 통해 하나의 열에서 하나 개의 값을 요청 I 8 개 스레드에 산란하고있어 기록을 가져 오기 위해 내 코드입니다 :
ColumnPath은 cp = 새로운 ColumnPath(); cp.Column_family = "Standard1"; cp.Column = utf8Encoding.GetBytes ("site"); 문자열 키 = (1 + sRand.Next (9)) + "." + (1 + sRand.Next (1000000)); ColumnOrSuperColumn logline = client.get ("Keyspace1", key, cp, ConsistencyLevel.ONE); 메모리에 모든 레코드를 저장하기에 충분한 RAM을 가지고하지 않은 것 같습니다 어떤 통찰력
확실히 메모리에 모두 저장할 수는 없지만 10mil 레코드는별로 좋아 보이지 않습니다. 사람들은 수십억 개의 레코드를 어떻게 다루고 있습니까 ?? –
열쇠는 가능한 디스크에 저장하는 것이 아니라 RAM에 최대한 저장하는 것입니다. 수십억 개의 레코드를 처리하려면 여러 머신에 걸쳐이를 배포하고 전체적으로 사용하십시오. 또 다른 인기있는 NoSQL 솔루션 인 Riak에서 어떻게 달성되는지에 대한 아주 멋진 기사 [1]가 있습니다. 이 기사에서 논의 된 많은 측면이 카산드라에게도 적용됩니다. 카산드라는 동일한 기본 아이디어를 토대로 구축 되었기 때문입니다. [1] : https://wiki.basho.com/display/RIAK/An+Introduction+to+Riak –