- 순수 Go로 작성된 MySQL 호환 데이터베이스 엔진
- 데이터 소스에 구애받지 않는 SQL 엔진이며, MySQL 문법과 프로토콜을 사용해 제공된 데이터 소스에 대해 쿼리를 실행
- 간단한 인-메모리 데이터베이스 구현체가 포함되어 있으며, 자체 백엔드를 구현해 원하는 데이터 소스를 쿼리할 수 있음
호환성
- 특정 제한 사항을 제외하고는 go-mysql-server는 MySQL의 대체재로 사용할 수 있음
- MySQL에서 작동하는 클라이언트 라이브러리, 도구, 쿼리, SQL 문법, SQL 함수 등이 go-mysql-server에서도 작동해야 함
- 기능 차이가 발견되면 이슈 제보 바람
프로젝트 범위
- 데이터 소스를 쿼리하기 위한 SQL 서버 및 엔진
- 테스트에 사용하기 적합한 인-메모리 데이터베이스 백엔드 구현
- 자체 데이터 소스를 쿼리하기 위한 새로운 백엔드 구현에 사용할 수 있는 인터페이스
- 몇 가지 주의사항을 고려하고 전체 데이터베이스 구현을 사용한다면 MySQL 데이터베이스를 대체할 수 있음
go-mysql-server의 주요 사용 사례:
- 내장된
memory
데이터베이스 구현을 사용해 Go 테스트 환경에서 MySQL을 대신함
- 몇 가지 인터페이스를 구현해 임의의 데이터 소스에 SQL 쿼리로 접근할 수 있게 함
인-메모리 테스트 서버 사용
- 인-메모리 테스트 서버는 테스트에서 실제 MySQL 서버를 대체할 수 있음
- 제공된 예제 코드를 사용해 서버를 시작할 수 있음
- 서버가 실행되면 MySQL 클라이언트나 Go MySQL 커넥터,
mysql
쉘 등으로 접속 가능
인-메모리 데이터베이스 구현의 제한사항
- 동봉된 인-메모리 데이터베이스 구현은 테스트용으로 사용하기 위한 것임
- 알려진 제한사항:
- 스레드 안전하지 않음. 동시성 문제를 피하려면 DDL과 DML 문을 단일 고루틴으로 제한해야 함
- 트랜잭션을 지원하지 않음.
START TRANSACTION
, ROLLBACK
, COMMIT
등의 문은 작동하지 않음
- 비효율적인 인덱스 구현. 인덱스 조회와 조인은 내부 테이블에 대해 전체 테이블 스캔을 수행함
사용자 정의 백엔드 구현
- 일부 인터페이스를 구현해 자체 데이터 소스를 쿼리하는 백엔드를 만들 수 있음
- 자세한 지침은 백엔드 가이드 참조
go-mysql-server로 구동되는 프로젝트
- dolt
- gitbase(중단됨)
- go-mysql-server로 데이터베이스 백엔드를 구축 중이라면 알려주기 바람
라이선스
GN⁺의 의견
- go-mysql-server는 Go로 작성된 가벼운 MySQL 호환 데이터베이스 엔진으로, 테스트 환경에서 MySQL을 대체하거나 자체 데이터 소스를 SQL로 쿼리하는 용도로 유용해 보임
- MySQL 호환성을 목표로 하므로 기존 MySQL 기반 애플리케이션을 크게 수정하지 않고도 적용할 수 있을 것으로 기대됨
- 다만 아직 실험적인 프로젝트이며, 특히 인-메모리 구현은 테스트용에 그치므로 프로덕션 적용 시에는 성능과 안정성 면에서 주의가 필요해 보임
- 백엔드 개발자라면 인터페이스를 직접 구현해 원하는 데이터 소스를 연결할 수 있다는 점이 매력적일 것임. Dolt와 같은 실제 프로젝트 사례를 참고하면 좋겠음
- 비슷한 MySQL 호환 데이터베이스로는 TiDB, CockroachDB 등이 있음. go-mysql-server는 이들과 달리 백엔드를 자유롭게 구현할 수 있다는 장점이 있지만, 반대로 백엔드 개발에 추가 비용이 든다는 단점도 있음