2009년 6월 22일 월요일

Falcon 파일의 구성

Falcon은 「데이터 파일」과 「시리얼로그 파일」라고 불리우는 2종류의 파일로 구성되어 있다.

전자는 테이블 데이터와 메타데이터등을 저장하기위한 것으로 InnoDB의 InnoDB데이터 테이블에 대응한다.

후자는 트랜잭션로그(REDO로그)를 보존하는 것으로 InnoDB에서의 InnoDB로그파일에 해당한다.

트랜잭션의 커밋이 일어날 때 시리얼 로그 파일에 대해서 추가적으로 동기 저장이 이루어진다.
(데이터 파일의 저장은 비동기)

이런 내용들은 InnoDB 로그 파일이나 다른 RDBMS의 REDO로그 파일하고 기본적으로 다른 것은 없다.

다만 InnoDB로그파일은 사이즈가 고정적인 것에 반해 시리얼 로그 파일의사이즈는 일정하지는 않다.

또 , 동시에 여러개의 쓰레드가 트랜잭션 커밋을 하는 경우에는 따로따로 저장하지 않고 모아서 디스크에 저장함으로 I/O횟수를 줄이는 「그룹 커밋」의 기술을 채용하고 있다.

이외에 Falcon에서는 「데이터파일에는 커밋되지 않은 정보는 쓰여지지않는다」라는 특징이 있다.

보통의 RDBMS에서는 대량의 테이블 데이터를 다루는 경우에 메모리공간이 부족해지기 전에 커밋전/커밋완료와 관계없이 일부 데이터를 데이터 파일과 REDO로그 파일에 강제적으로 저장이 이루어지는 「checkpoint」기술이 사용되고 있다.

Falcon에서는 이런 경우 커밋되지 않은 정보는 데이터 파일에 쓰지 않고 시리얼로그 파일에만 저장한다.
쓰여진 내용은 데이터 파일에 대해서 나중에 (비동기적으로 ) 한꺼번에 반영된다.

이 때 커밋한 정보는 데이터파일에 비동기적으로 반영되지만 롤백한 경우에는 해당 레코드는 단순히 무시되고 데이터파일에는 반영되지 않는다.

이 때문에 보통의 RDBMS하고는 달리 롤백에 따른 데이터파일에 대한 I/O가 필요없게 되기 때문에 롤백 부하가 매우 가볍게 된다.

다른 RDBMS에 비교하면 데이터파일에 랜덤 I/O횟수가 상대적으로 적게되고 시리얼로그에 쓰는 양이 상대적으로 많아질 것으로 생각되어진다.

문제가 되는 것은 대부분 I/O회수이므로 성능은 향상되는 것이 기대된다.

실제로 작성되는 파일
현재는 Falcon테이블을 작성하면 데이터디렉토리 밑에 한개의 데이터베이스당 한개의 데이터파일과 2개의 시리얼로그 파일이 작성된다.

db1데이터베이스에 Falcon테이블을 작성한 예
# ls
db1 db1.fl1 db1.fl2 db1.fts mysql test

db1.fts가 데이터 파일, db1.fl1하고 db1.fl2가 시리얼로그 파일이다.
안정판에서는 서버단위로 데이터 파일과 시리얼로그 파일을 작성하는 등 보다 많은 선택이 될 예정이다.
또 InnoDB 데이터 파일은 필요에 따라서 영역의 자동확장을 수행시키는 것이 가능한 것처럼 Falcon도 자동확장된다.