[NoSQL/Cassandra] PHPCassa 에서 TimeUUIDType을 어떻게 활용하는가?

사용자 삽입 이미지
별거 아닌 내용을 적어보려고 합니다. 하지만 처음 접할때 생각보다 어려웠던 기억이 나는군요. 이 글을 보시기 전에 PHPCassa에 대한 이해가 필요합니다. [이글]을 먼저 보시길 추천합니다.

Cassandra에는 기본적으로 TimeUUIDType이라는 것이 존재합니다. 이 타입을 이용하여 여러개의 컬럼키들을 시간순으로 정렬하는것이 가능해집니다. 기존의 MySQL등에서는 Auto Increment 옵션을 사용하여 Unique한 PK를 만들어냅니다만 Cassandra에서는 이 TimeUUIDType을 이용하여 사실상 거의 중복되지 않는 키값을 만들어 낼 수 있습니다.

그렇다면 이제 이 키값을 이용하여 서버-클라이언트간에 주고 받을 수 있어야 하는데요, 이것이 생각보다 간단하지 않습니다.(사실 알고보면 간단합니다만;) 우선 소스코드부터 보여드리겠습니다.
[code]// 1. 새로운 UUID를 생성
$newUUID = CassandraUtil::uuid1();
echo “<p>새로운 UUID생성: $newUUID</p>”;

// 2. 클라이언트/서버와 주고받을때 사용할 수 있는 문자형태로 변환
$strUUID = strval(CassandraUtil::import($newUUID));
echo “<p>식별가능한 문자열UUID로 변경: $strUUID</p>”;

// 3. 다시 바이너리 형태의 UUID로 변경
$importedUUID = CassandraUtil::import($strUUID)->bytes;
echo “<p>바이너리 형태의 UUID로 변경: $importedUUID</p>”;[/code]
위의 코드는 현재의 시간(64bit microtime)을 이용하여 UUID를 생성한 다음 그것을 서버-클라이언트간에 식별하기 쉬운 문자열로 바꾼후에 다시 그 문자열을 Cassandra에서 바로 사용할 수 있는 형태로 되돌리는 과정을 수행합니다. 위의 코드는 아래와 같은 결과를 보여줍니다.

사용자 삽입 이미지
첫번째와 마지막이 사실상 같다는 것을 알 수 있습니다. Cassandra에서는 기본적으로 이 Binary형태의 값을 사용합니다. 하지만 개발자가 사용하기 어렵고 이렇게 생성된 값을 서버/클라이언트간 주고 받는다고 해도 생각해볼점이 많아집니다. 이 경우 두번째와 같은 형태로 변경하여 사용할 수 있습니다.