MySQL InnoDB is DEAD ?!

슬라이드1

Linkbench for MySQL & MongoDB with a cached database

http://smalldatum.blogspot.kr/2015/07/linkbench-for-mysql-mongodb-with-cached.html

 

Mark Callaghan 옹의 small datum 블로그에 RocksDB, MongoDB 게시글들이 많이 올라오고 있습니다.

언제부터인가 OLTP 에서 MySQL vs PostgreSQL 이 아닌, MySQL vs MongoDB 구도가 되어 버린 탓도 있을거고, MongoDB 가 WireTiger 를 선택해서!? Tim 이 팽당함?! ^^;

RocksDB 는 Facebook 에서 만들고 있는 LevelDB 기반의 key-value storage engine 입니다.

왜 engine 일까요?! MySQL, MongoDB, 등등 engine 을 교체해서 본인들이 원하는 성능과 기능을 추가하고 싶은거겠죠!? 물론 독립적으로도 사용가능합니다. 기능은 모르겠지만, 성능은 좋습니다. LevelDB 기반들의 공통점이죠?!

http://rocksdb.org

 

그런데, 왜 Facebook 은 InnoDB 를 개선하지 않고, RocksDB 를 만들었고, Tokutek 은 TokuDB 를 만들었을까요?!

InnoDB vs TokuDB vs RocksDB

B-Tree, B*Tree, B+Tree 란 자료구조의 근본적인 성능이슈 때문이기도 하고, 스토리지가 spin disk to flash 로 변하는 패러다임에, memory device 의 가격하락, OTLP 부하 증가, 등등으로 인해서 B+Tree 보다는 다른 자료구조를 찾게되었죠. ( HDD to SSD, SSD to MEM 심화때문이죠! )

TokuDB -> fractal tree, RocksDB -> LSM

https://en.wikipedia.org/wiki/Fractal_tree_index

https://en.wikipedia.org/wiki/Log-structured_merge-tree

 

최근에는 InnoDB engine 의 insert 성능, 용량때문에, TokuDB engine 를 혼용해서 사용하는 곳이 많습니다. 그럼에도, Oracle MySQL 5.7 engine list 에 들어가 있지는 않습니다. ( 예전에 InnoDB 범용적으로 많이 쓰임에도 MyISAM 을 제끼고 default engine 으로 되는데 오래 걸리긴 했습니다. ) TokuDB engine 의 안정화 이슈도 있고, 3rd party 와의 호환성, FK 미지원, backup tool 등 많은 이슈가 있긴 합니다.

앞으로 향후에도 Oracle MySQL 은 TokuDB, RocksDB, BlahDB, BlahDB~ 가 나와도 절대로 InnoDB 를 바꾸지 않을겁니다. Oracle 은 SUN 보다 Innobase 를 먼저 인수하였고, 모든건 다 계획대로?!

https://en.wikipedia.org/wiki/Innobase

 

MySQL 은 Oracle 로 인수된 후로 글로벌한 이슈를 못따라가고 있습니다. 아니 안따라가고 있습니다. 물론 enterprise 와 open source 개발은 좀 성격이 달라서 빠르게 따라가기는 힘든 부분이 있긴 합니다. ^^;

향후에도 InnoDB 로 대응하기에는 한계가 있기 때문에 TokuDB, RocksDB, BlahDB, BlahDB~ engine 을 고려된 아키텍처 및 운영이 되어야할 것 같습니다.

 

기승전FB !! 대동단FB !!

Rocks 는 InnoDB 대비해서 insert 성능은 좋으나, TokuDB 보다는 못합니다. 그러나, FB 님이 지속적으로 개선해주시라 보고, 앞으로 어떤 멋진 것들을 내놓으실지 모릅니다?! ( 사실 TokuDB 이 더 앞서나갈 것 같습니다. percona 로 인수 되었기 때문에 MongoDB 미련을 버릴테니… )

용량이슈도 해결되리라 봅니다?!

https://github.com/MySQLOnRocksDB/mysql-5.6/issues/80