문서번호 : 11-1608930
[1] 소개
SingleStore는 집계(Aggregation) 및 필터링(Filtering) 성능을 높이기 위해 Intel의 SSE4.2 및 AVX2 명령어세트를 이용해 SIMD(Single Instruction Multiple Data)를 구현하고 있습니다.
Apple Silicon이 탑재된 M1/M2 계열 Mac은 Intel이 아닌 ARM Processor 계열이기 때문에 AVX2 등의 명령어세트가 지원되지 않아 SingleStore를 M1 Mac에서는 설치하여 사용하지 못했었습니다.
SingleStore는 v7.8.11부터 SIMD와 같은 여러 최적화 기법을 다수 희생하여 Apple Silicon에서도 Docker Dev Image를 통해 설치할 수 있도록 지원합니다. 따라서 성능은 Intel 기반 시스템보다 다소 떨어지지만, SingleStore의 기능 테스트 용도로 충분히 사용할 수 있습니다.
Docker Desktop : 4.11.1 이상
SingleStore : 7.8.11 이상
[2] Docker Desktop 설치
Docker.com에서 Apple Chip 용으로 4.11.1 이상을 다운받아 설치하고 실행합니다.
[3] SingleStore 컨테이너 생성
Dev Image 0.2.64 태그부터는 SingleStore가 x86-64-v3 명령어 집합을 요구하며, Rosetta는 이를 지원하지 않아 CPU does not support x86-64-v3 오류가 발생할 수 있습니다. Rosetta 환경에서 안정적으로 실행하려면 0.2.62 이하 태그를 명시적으로 지정하는 것을 권장합니다. 또한, 최신 SingleStore(0.2.63 이상 태그) 사용을 위해서는 Rosetta 설정을 해제해야 합니다.
터미널을 열고 Docker로 SingleStore Dev Image 컨테이너를 생성합니다.
•
3306 port는 MySQL과 같이 client에서 접속할 때 사용됩니다.
•
8080 port는 SingleStudio Studio(GUI 모니터링 및 SQL Editor)를 위해 사용됩니다.
•
9000 port는 Data API(HTTP API)를 위해 사용되며, 클라이언트 없이도 HTTP 요청으로 SQL을 실행할 수 있게 해줍니다.
$ docker run \
-d --name <container_name> \
-e ROOT_PASSWORD="<root_password>" \
--platform linux/amd64 \
-p 3306:3306 -p 8080:8080 -p 9000:9000 \
ghcr.io/singlestore-labs/singlestoredb-dev:<version or latest>
Bash
복사
SingleStore Cluster는 다음과 같이 시작/정지/삭제 할 수 있습니다.
$ docker start <container_name>
$ docker stop <container_name>
$ docker rm <container_name>
Bash
복사
Docker Desktop 에서 SingleStore Container를 확인하면 AMD64 아키텍처를 에뮬레이트하고 있어 성능이 떨어질 수 있다고 알려주고 있습니다.
[4] SingleStore 클러스터 구조 확인
toolbox를 통해 클러스터의 node 목록을 확인합니다.
$ docker exec -it <container_name> sdb-admin list-nodes
Bash
복사
Production 환경에서는 각 Host마다 하나의 Node를 설치하는 것이 권장됩니다. 그러나 Dev Image는 기능 테스트를 목적으로 두고 있기 때문에 하나의 Container에 두 개의 노드를 3306, 3307 포트로 구분해서 설치되어 있습니다.
Master : Master Aggregator로 Client의 접속을 받아 SQL을 컴파일하고, Leaf Node로부터 전달받은 데이터를 재집계하여 Client로 반환합니다.
Leaf : 데이터를 파티션(Partition) 단위로 분할하여 저장하고, 실제 분산 Query를 수행하여 결과를 Aggregator로 전달합니다.
[5] SingleStore SQL 실행
SQL Client로 Aggregator에 접속하여 Database 및 테스트 테이블을 생성합니다.
이후 10만 건의 row를 생성해 테이블에 Insert하고, 저장된 row 건수를 확인합니다.
$ docker exec -it <container_name> singlestore -p
Enter password: ...
singlestore> CREATE DATABASE testdb;
singlestore> USE testdb;
singlestore> CREATE TABLE test_table ( id BIGINT PRIMARY KEY, nm VARCHAR(20) );
singlestore> INSERT INTO test_table
SELECT rn, CONCAT('TEST',rn)
from (select row_number() over () as rn
from table(create_array(100000):>array(bigint))
);
singlestore> SELECT count(*) FROM test_table;
singlestore> SELECT partition_id(), count(*) FROM test_table GROUP BY partition_id();
Bash
복사
분산(Distributed) DB이므로 데이터를 파티션(Partition) 단위로 나누어 저장합니다. 위 조회 결과를 통해 test_table의 데이터가 여러 파티션에 나뉘어 저장된 것을 확인할 수 있습니다.







