본문 바로가기
SingleStoreDB/웨비나

SingleStore, 초당 수조 개의 row 스캔 장벽을 허물다!

by 에이플랫폼 [Team SingleStore Korea] 2021. 8. 10.

지난 주 산호세(San Jose)에서 열린 Strata Data Conference의 최신 Intel Skylake 서버에서 SingleStore를 사용하여 초당 1조 row 이상의 프로세스 처리를 시연하는 기회를 가졌습니다.


0.25초 미만의 상호적인 응답 처리가 이용자들에게 만족감을 준다는 것은 잘 알려져 있습니다. 약 0.25초 안에 응답을 제공하면 해당 응답 결과는 사용자에게 마치 즉각 처리된 것처럼 보입니다.

그러나 대규모 데이터 세트와 동시성 요구로 인해 모든 고객에게 이러한 수준의 속도를 제공하는 것은 불가능할 수 있습니다. 따라서 개발자는 요약 집계 데이터를 미리 계산하는 방법을 사용하는 경우가 있습니다. 하지만 추가 그룹화 열을 추가하는 것과 같이 쿼리를 약간 조정하면 갑자기 훨씬 느리게 실행되는 문제로 이어질 수 있습니다. 이것은 응답 결과가 실시간 처리된 값이 아님을 의미합니다. (즉, 최신 데이터가 아닙니다.)

SingleStore는 사전 계산 결과에 의존하지 않고 동시 액세스를 통해 방대한 데이터 세트에 대해 사용자가 원하는 대화형 응답 시간을 제공합니다.

초당 1조 개의 행을 처리

2017년 말에 출시된 SingleStore DB 6 버전에는 columnstore 데이터에 대한 단일 테이블 그룹화/집계 쿼리를 엄청나게 빠르게 실행하는 새로운 기술이 포함되어 있습니다. 해당 기능은 다음을 기반으로 구현되었습니다.

(1) columnstore의 인코딩된(압축된) 데이터에 대해 직접 수행되는 작업

(2) 기계 코드에 대한 쿼리 컴파일

(3) 벡터화된 실행

(4) Intel AVX2 단일 명령어 및 다중 데이터(SIMD) 향상 사용

group-by 컬럼이 사전, 정수 값 또는 실행 길이 인코딩으로 인코딩되면 SingleStore는 최고점에서 코어당 초당 30억 row을 초과하는 속도로 단일 테이블 그룹화/집계를 실행합니다. 그룹 수가 적고 집계 기능이 단순할수록 SingleStore가 더 빨라집니다.

이 놀라운 코어당 속도는 초당 1조개의 row를 기록할 수 있도록 하는 기반이 되었습니다. 보다 현실적인 쿼리를 사용하여 이 기능을 수행하기 위해 NASDAQ에서 주식 거래를 시뮬레이션하는 데이터 세트를 구축하는 데이터 생성기를 작성했습니다. 그 후 Intel의 파트너와 이야기를 나누었고 그들은 최신 Skylake 프로세서가 탑재된 연구소의 서버에 대한 액세스를 관대하게 제공했습니다. 이러한 시스템에는 28개의 코어를 가지고 있는 Intel® Xeon® Platinum 8180 프로세서 2개가 있어 서버당 총 56개의 코어가 있습니다. 그림 1과 같이 각 노드당 하나의 서버를 사용하여 1개의 Aggregator 노드와 8개의 leaf 노드로 구성된SingleStore 클러스터를 만들었습니다. 이 클러스터의 leaf 노드에는 2 * 28 * 8로 총 448개의 코어가 있습니다. 이는 초당 얻을 수 있는 전체 row 수를 말합니다.

그림 1. 초당 1조 row를 처리하는데 사용되는 하드웨어 배열.

각 Leaf 서버에 2개의 SingleStore Leaf 노드가 있는 이 클러스터에 SingleStore를 설치했으며, NUMA(Non-uniform Memory Access) 최적화가 활성화되어 각 SingleStore Leaf 노드의 프로세스가 전용 Skylake에서 실행됩니다. 최적의 스캔 성능을 얻기 위해 코어당 하나의 파티션으로 데이터베이스 트레이드를 만들었고 이 후 수십억 row의 주식 거래(수십 년의 거래)를 나타내는 데이터를 trade라는 테이블에 로드했습니다. 주식 자본금이 클수록 더 많은 거래를 할 수 있습니다. 다음은 작은 데이터 샘플입니다.

memsql> select id, stock_symbol, shares, share_price, trade_time
from trade
limit 10;

+-------------+--------------+-----------+-------------+----------------------------+
| id          | stock_symbol | shares    | share_price | trade_time                 |
+-------------+--------------+-----------+-------------+----------------------------+
| 10183273878 | CXRX         | 600.0000  | 22.0000     | 2018-03-08 08:50:57.000000 |
| 10184155113 | CXRX         | 700.0000  | 31.0000     | 2018-03-08 08:50:57.000000 |
| 10183273871 | CXRX         | 500.0000  | 8.0000      | 2018-03-08 07:50:57.000000 |
| 10185917724 | CXRX         | 1000.0000 | 63.0000     | 2018-03-08 06:50:57.000000 |
| 10183273873 | CXRX         | 1000.0000 | 74.0000     | 2018-03-08 04:50:57.000000 |
| 10183273874 | CXRX         | 800.0000  | 96.0000     | 2018-03-08 10:50:57.000000 |
| 10183273865 | CXRX         | 600.0000  | 82.0000     | 2018-03-08 06:50:57.000000 |
| 10183273876 | CXRX         | 600.0000  | 40.0000     | 2018-03-08 05:50:57.000000 |
| 10183273877 | CXRX         | 700.0000  | 47.0000     | 2018-03-08 05:50:57.000000 |
| 10183273869 | CXRX         | 100.0000  | 15.0000     | 2018-03-08 05:50:57.000000 |
+-------------+--------------+-----------+-------------+----------------------------+

 

해당 테이블엔 몇 개의 row가 있을까요?

memsql> select format(count(*), 0) as c from trade;
+----------------+
| c              |
+----------------+
| 57,756,221,440 |
+----------------+

약 578억개의 row입니다.

이제 아래 쿼리를 실행하여 역대 가장 많이 거래된 상위 10개 주식을 찾아봤습니다.

select stock_symbol, count(*) as c
from trade
group by stock_symbol
order by c desc
limit 10;

+--------------+----------+
| stock_symbol | c        |
+--------------+----------+
| GILD         | 39321600 |
| AABA         | 39190528 |
| KHC          | 39190528 |
| AMZN         | 39190528 |
| ASML         | 39059456 |
| CHTR         | 39059456 |
| TXN          | 39059456 |
| FB           | 39059456 |
| CELG         | 39059456 |
| TIG          | 39059456 |
+--------------+----------+
10 rows in set (0.05 sec)

이 쿼리는 0.05초 만에 실행되었습니다! 정확한 스캔 속도를 얻으려면 더 구체적인 수치가 필요합니다. 그래서 스토어드 프로시저(Stored Procedure)를 100번 반복해서 실행하도록 작성했습니다.

memsql> call profile_query(100);
Query OK, 0 rows affected (4.51 sec)

스토어드 프로시저를 사용하면 쿼리에 대한 평균 응답 시간이 0.0451초로 나타나며 다음과 같이 초당 1조 2,800억 row의 검색 속도를 얻을 수 있습니다.

memsql> select format(count(*)/0.0451, 0) as c from trade;
+-------------------+
| c                 |
+-------------------+
| 1,280,625,752,550 |
+-------------------+

SingleStore는 인코딩된 데이터, 벡터화, SIMD에 대한 운영을 통해 코어당 초당 28억 6천만 개의 row를 스캔하고 처리합니다. 결과를 미리 계산하지 않고 모든 row에대해 실시간으로 집계를 하고 있습니다.

초당 수조 개를 조회한다는건 무엇을 뜻하는 걸까요?

448개 코어에 달하는 Intel의 최신 칩에서 SingleStore를 통해 초당 수조개의 row를 조회한다는 사실은 몇 가지 측면에서 매우 중요합니다. 첫번째로 결과를 미리 계산하지 않고도 매우 많은 양의 데이터셋에 대해 상호적인 응답을 얻을 수 있습니다. 이를 통해 사용자가 보다 유연한 상호 작용을 통해 데이터를 탐색할 수 있으며, 실시간 분석도 가능하게 합니다. 두번째로 소규모 데이터셋에서 수백 명의 사용자가 동시에 액세스할 수 있으며, 모든 사용자가 상호적인 응답을 얻을 수 있습니다. 이렇게 데이터에 액세스한 사용자는 사전 계산된 요약 데이터가 아닌 최신 데이터에 대한 분석을 하는 이점을 얻을 수 있습니다. SingleStore는 개발자가 사용하기 쉬운 표준 SQL을 통해 이 모든 것을 지원합니다.

또한 특수 용도의 DB 하드웨어가 아닌 Intel의 표준 하드웨어에서도 이와 같은 성능을 달성했습니다. 이러한 시스템은 은행 계좌 없이도 기업에서 구입하거나 자주 사용하는 클라우드 공급업체에서 대여할 수 있습니다.

Intel 칩에서 SingleStore를 사용하여 사용자를 위해 무엇을 할 수 있을지 테스트해 보십시오. 그리고 어떻게 초당 1조 행을 달성했는지 아래를 보십시오.

https://youtu.be/emcsC_hmN8s

 

 

참고: 하드웨어에대해 더 알고 싶다면

사용한 Skylake 칩에 대한 자세한 내용을 원하신다면, 아래의 클러스터에 있는 9개의 총 서버를 구성하는 서버 중 하나인 Linux lscpu의 유틸리티의 출력을 참조하십시오.

Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 112
On-line CPU(s) list: 0-111
Thread(s) per core: 2
Core(s) per socket: 28
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 85
Model name: Intel(R) Xeon(R) Platinum 8180 CPU @ 2.50GHz
Stepping: 4
CPU MHz: 2501.000
BogoMIPS: 4993.28
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 1024K
L3 cache: 39424K
NUMA node0 CPU(s): 0-27,56-83
NUMA node1 CPU(s): 28-55,84-111

 

데이터는 SSD에 저장되었지만, 웜 스타트(warm-start) 쿼리를 실행했기 때문에 큰 의미는 없습니다. 데이터는 이미 메모리에 캐시되었고 네트워크는 10GB 이더넷입니다.

March 13, 2018

Eric Hanson

 


출처: https://www.singlestore.com/blog/memsql-processing-shatters-trillion-rows-per-second-barrier/

 

Shattering the Trillion-Rows-Per-Second Barrier With SingleStore

SingleStore breaks the trillion-row-per-second barrier on 448 cores worth of Intel’s latest chips is significant in a couple of ways. Get a demo now!

www.singlestore.com

 

​※ www.a-platform.biz | info@a-platform.biz