Infobright와 비슷한 Column DB이지만, 다른 점도 있다네.
Infobright and InfiniDB may both be column stores but they operate very differently. InfiniDB takes a very proven strategy of “divide and conquer” using partitioning and a distributed hash join to do the “heavy lifting”. They also appear to actually use the MySQL storage engine interface for storing data instead of using a custom loader pretending to be LOAD DATA INFILE. Infobright packages data into packets and uses “rough set theory” to eliminate packets from inspection, and using preaggregated metadata from the “knowledge grid” to answer questions.
어쨌든, INSERT, UPDATE, DELETE도 되고, MPP 구성(상용 버전에서만)도 할 수 있다고 하니 좋은 듯 하다.
Core Features of InfiniDB (공짜 버전 포함)
- Column-oriented architecture
- Multi-threaded design
- Automatic vertical and horizontal partitioning
- (기존 RDBMS의 partitioning은 horizontal)
- High concurrency
- High-speed data loader
- DML Support
- (insert, update, delete 지원. Infobright는 지원하지 않음. Infobright도 상용 버전은 지원하려나?)
- Transactional support
- Crash recovery
- MVCC design
- No need for indexing
- Column DB를 사용해 보면 알겠지만, Index를 지원하지 않는다. 그런데 성능은 은근 괜찮다.
- Low maintenance
- Materialized view나 summary table을 만들 필요가 없음.
- Logical Data Compression
- 압축을 하기 때문에 테이블 사이즈가 엄청 작아짐. 그러나 Infobright를 써 보면 알겠지만, 컬럼에 함수를 적용해서 컬럼 값을 가공하는 경우 속도가 현격히 줄어듬. => BI에서 이런 경우는 별로 없으니 문제 안 됨.
- Alter table support
- Performance diagnostics
- MySQL front end
- 기존 MySQL 사용자에게 친숙함.
Core Features of InfiniDB (Enterprise 버전의 경우)
- MPP(Massive parallel processing) 지원.
- multiple-node. Data를 여러 대의 서버에 분산시켜서 처리할 수 있음. 장비 붙일 때마다 선형적으로 성능 향상.
- Distributed shared-nothing data cache
- Automatic failover
- 이건 뭐 실제 경험해 보지 않는 이상 얼마나 잘 될진 사실 의문임.
- Automatic concurrency scale-out
- Automated software patch management
Calpont InfiniDB Concepts Guide 문서로 부터 발췌함.
참고 사이트
- http://dev.mysql.com/tech-resources/articles/mysql_datawarehouse_calpont1.html
- http://www.infinidb.org/
- http://rpbouman.blogspot.com/2009/10/calpont-opens-up-infinidb-open-source.html
설치 시 단점.
InfiniDB 문서를 읽을 때는 좋았는데, 일단 설치는 좀 까다롭구만;; 문제점이랄까.. 답답한 점은 다음과 같다.
- 1) rpm으로 설치 시, –prefix 옵션을 줄 수가 없다. 무조건 /usr/local/Calpont/로 설치되는데, root 파티션 용량이 적은 나로서는 GG. (처음 설치 후 파일이 생성되는데 3.9G 정도 만들어진다.) binary로 설치해도 압축 푼 뒤에 /usr/local/Calpont/ 디렉터리로 압축 풀린 파일들을 복사하라고 하기 때문에 별 의미가 없다.
- 이렇게 된 이유는 InfiniDB에 설치되는 스크립트들에 /usr/local/Calpont/가 하드코딩으로 박혀 있기 때문이다….
-
아……. 이것은 /usr/local/Calpont/를 다른 디렉터리로 soft-link 걸면 될 걸.. 너무 많이 고민했었네…
- 2) 기존에 MySQL이 설치된 경우, 3306번 포트가 사용 중이고, /etc/my.cnf 파일이 존재할 가능성이 많다. 그런데, InfiniDB의 MySQL도 3306번 포트를 쓰기 때문에, 설정을 바꿔 줘야 한다(/usr/local/Calpont/mysql/my.cnf) 또한 InfiniDB의 daemon들을 띄울 때 MySQL 데몬이 실행되는데, /etc/my.cnf 파일이 기존에 있을 경우, 이것을 또 참조하려고 한다.
-
=> /etc/init.d/mysql-Calpont 파일을 열어서 341 라인에
341: $bindir/mysqld_safe –defaults-file=/usr/local/Calpont/mysql/my.cnf –datadir=$datadir –pid-file=$server_pid_file $other_args >/dev/null 2>&1 &
--defaults-file=/usr/local/Calpont/mysql/my.cnf
을 추가해야 한다.
CREATE TABLE.
- 테이블 생성 속도는 좀 느리다… 간단한 스키마인데도 약 4초 정도 걸림.
- 테이블을 생성만 해도 테이블 스페이스를 만들어서 그런지, 디스크 사용량이 수백MB 씩 늘어난다. 이것 때문에 느려지는 듯… 테이블 생성이 빈번하지 않는 경우 별 문제 없음.
- INT형 선언시에 INT(11) 이런 식으로 뒤에 숫자(display size)를 줄 수가 없다.
- ENGINE=InifiDB 라고 주어야 한다. (메뉴얼에는 Calpont이라고 잘못 적혀있음)
- UTF8을 지원하지 않는다. UTF8 데이터를 INSERT할 수는 있으나, WHERE 조건이나 Sort시에 제대로 작동하지 않는다.
- 컬럼에 DEFAULT NOT NULL, DEFAULT NULL 이런 constraint를 줄 수 없다.
- 자세한 건 InfiniDB Syntax Guide 문서를 보시는 것이 좋겠습니다.
INSERT/LOAD DATA
- INSERT가 지원되서 좋았지만, 속도는 느리다. (1건 INSERT하는데, 0.07ms 걸림)
- LOAD DATA 구문으로 벌크 로드를 할 수 있다. (초당 3300건… 너무 느리다) LOAD DATA LOCAL INFILE을 지원하지 않는다. 로딩할 파일은 절대 경로로 path를 적어야 함.
- cpimport 명령으로 벌크 로드시. 초당 40만건 이상. 꽤 괜찮은 성능 => 이 부분은 Infobright보단 빠른 듯 하다.
DELETE/DROP TABLE
- DELETE는 초당 17만건 밖에 지우지 못한다. 그나마 Infobright는 DELETE 자체를 지원하지 않았었지…
- MyISAM이나 Infobright는 DROP TABLE이 파일을 지우면 되는 것이기 때문에 금방 끝나지만, InfiniDB는 DROP을 하게 되면, 일일히 레코드를 지워서 그런지 DELETE 시간과 거의 비슷하게 끝난다.
SELECT 성능
- 테스트 결과, Infobright보다는 조금 빠르긴 하지만, sub-select가 지원되지 않는다. (2010년 상반기 지원 예정). 테스트 결과는 공개하기 좀 어렵고, 대신 http://www.mysqlperformanceblog.com/2009/11/02/air-traffic-queries-in-infinidb-early-alpha/ 에 올라온 결과를 인용하는 것으로 마무리 한다.