すべてのプロダクト
Search
ドキュメントセンター

Lindorm:データ圧縮テスト

最終更新日:Jan 14, 2025

このトピックでは、Lindorm、オープンソース HBase、オープンソース MySQL、およびオープンソース MongoDB 間で、さまざまなシナリオで実行されるデータ圧縮テストについて説明します。

背景情報

Lindorm は、複数のオープンソースサービスと互換性があり、クラウドネイティブのスケーラビリティを提供するマルチモデルハイパーコンバージドデータベースサービスです。さらに、Lindorm を使用すると、データベース内のデータを効率的に圧縮できます。 Lindorm は、データ圧縮用の zstd アルゴリズムをサポートし、辞書サンプリングを最適化してストレージコストを削減します。

このトピックで説明するデータ圧縮テストでは、特定のバージョンの以下のデータベースサービスが使用されます。

  • Lindorm: 最新バージョンの Lindorm が使用されます。デフォルトでは、最適化された zstd 圧縮アルゴリズムが使用され、辞書ベースの圧縮がサポートされています。

  • オープンソース HBase: HBase V2.3.4 が使用されます。 HBase は、Hadoop の新しいバージョンを使用する場合、zstd 圧縮アルゴリズムをサポートしています。ただし、データの圧縮は安定しておらず、コアダンプが発生しやすいです。ほとんどのオープンソース HBase ユーザーは SNAPPY 圧縮アルゴリズムを使用しています。

  • オープンソース MySQL: MySQL 8.0 が使用されます。デフォルトでは、データ圧縮は無効になっています。 MySQL は ZLIB 圧縮アルゴリズムをサポートしています。ただし、データ圧縮を有効にすると、MySQL データベースのクエリパフォーマンスが大幅に低下します。そのため、MySQL ユーザーが MySQL データベースのデータ圧縮を有効にすることはほとんどありません。

  • オープンソース MongoDB: MongoDB 5.0 が使用されます。デフォルトでは、SNAPPY 圧縮アルゴリズムが使用されます。ユーザーは、データ圧縮に SNAPPY アルゴリズムの代わりに zstd アルゴリズムを選択することもできます。

このトピックでは、Lindorm が一般的に使用される以下のシナリオ(注文、車載インターネット (IoV)、ログ、ユーザー行動)でデータ圧縮テストが実行されます。各テストシナリオでは、異なる圧縮アルゴリズムを使用する以下のデータベースサービスのデータ圧縮機能がテストおよび比較されます。デフォルトの zstd アルゴリズムを使用する Lindorm、辞書ベースの圧縮が有効になっている Lindorm、SNAPPY アルゴリズムを使用するオープンソース HBase、データ圧縮が無効になっているオープンソース MySQL、SNAPPY アルゴリズムを使用するオープンソース MongoDB、zstd アルゴリズムを使用するオープンソース MongoDB。

さまざまなシナリオでのテスト結果と結論の詳細については、「概要」をご参照ください。

注文

データの準備

このシナリオでは、TPC-H データセットがデータ圧縮テストに使用されます。 TPC-H は、業界で一般的に使用されるベンチマークです。 TPC-H は、データベースエンジンのクエリ分析機能を評価するために、Transaction Processing Performance Council によって定義およびリリースされています。

重要

このテスト中、TPC ベンチマークテスト仕様の一部の手順のみを実行します。テストの結果は、TPC ベンチマークテスト仕様に完全に従って実施されたテストから得られた結果と同等ではなく、比較することはできません。

TPC-H ツールのダウンロード

以下のファイルをダウンロードします: TPC-H_Tools_v3.0.0.zip

テストデータの生成

# unzip TPC-H_Tools_v3.0.0.zip
# cd TPC-H_Tools_v3.0.0/dbgen
# cp makefile.suite makefile
# vim makefile
################Oracle データベースのスクリプトとデータを生成します。以下のフィールドの値を変更します。
CC = gcc
DATABASE = ORACLE
MACHINE = LINUX
WORKLOAD = TPCH
################
# make -- dbgen プログラムを生成します。
# ./dbgen -s 10 -- 10 GB のテストデータを生成します。

コマンドが実行されると、現在のディレクトリに 8 つの TBL ファイルが生成されます。各ファイルは、テストデータを含むテーブルです。このテストでは、ORDERS.tbl ファイルが使用されます。このファイルには 1,500 万行のデータが含まれており、サイズは 1.76 GB です。次の表に、ファイル内のフィールドとフィールドのデータ型を示します。

フィールド

タイプ

O_ORDERKEY

INT

O_CUSTKEY

INT

O_ORDERSTATUS

CHAR(1)

O_TOTALPRICE

DECIMAL(15,2)

O_ORDERDATE

DATE

O_ORDERPRIORITY

CHAR(15)

O_CLERK

CHAR(15)

O_SHIPPRIORITY

INT

O_COMMENT

VARCHAR(79)

テストテーブルの作成

HBase

create 'ORDERS', {NAME => 'f', DATA_BLOCK_ENCODING => 'DIFF', COMPRESSION => 'SNAPPY', BLOCKSIZE => '32768}

MySQL

CREATE TABLE ORDERS  ( O_ORDERKEY       INTEGER NOT NULL,
                       O_CUSTKEY        INTEGER NOT NULL,
                       O_ORDERSTATUS    CHAR(1) NOT NULL,
                       O_TOTALPRICE     DECIMAL(15,2) NOT NULL,
                       O_ORDERDATE      DATE NOT NULL,
                       O_ORDERPRIORITY  CHAR(15) NOT NULL,
                       O_CLERK          CHAR(15) NOT NULL,
                       O_SHIPPRIORITY   INTEGER NOT NULL,
                       O_COMMENT        VARCHAR(79) NOT NULL);

MongoDB

db.createCollection("ORDERS")

Lindorm

# lindorm-cli
CREATE TABLE ORDERS  ( O_ORDERKEY       INTEGER NOT NULL,
                      O_CUSTKEY        INTEGER NOT NULL,
                      O_ORDERSTATUS    CHAR(1) NOT NULL,
                      O_TOTALPRICE     DECIMAL(15,2) NOT NULL,
                      O_ORDERDATE      DATE NOT NULL,
                      O_ORDERPRIORITY  CHAR(15) NOT NULL,
                      O_CLERK          CHAR(15) NOT NULL,
                      O_SHIPPRIORITY   INTEGER NOT NULL,
                      O_COMMENT        VARCHAR(79) NOT NULL,
                      primary key(O_ORDERKEY));

データ圧縮結果

image.png

データベース

Lindorm

(zstd)

Lindorm

(辞書ベースの圧縮)

HBase

(SNAPPY)

MySQL

MongoDB

(SNAPPY)

MongoDB

(zstd)

テーブルサイズ

784 MB

639 MB

1.23 GB

2.10 GB

1.63 GB

1.32 GB

IoV

このシナリオでは、次世代シミュレーション (NGSIM) データセットがデータ圧縮テストに使用されます。 NGSIM は、米国連邦道路局によって開始されたデータ収集プロジェクトです。このプロジェクトは、車両追跡や車線変更などの運転行動の研究、交通流分析、マイクロ交通モデル構築、車両軌跡予測、自動運転意思決定計画などに広く実装されています。すべての NGSIM データは、米国ルート 101 の実際の車両の軌跡から収集されます。

データの準備

次のデータセットファイルをダウンロードします: NGSIM_Data.csv。ファイルには 1,185 万行のデータが含まれており、サイズは 1.54 GB です。各行には 25 列が含まれています。 NGSIM データセットの構造の詳細については、「NGSIM データセット」をご参照ください。

テストテーブルの作成

HBase

create 'NGSIM', {NAME => 'f', DATA_BLOCK_ENCODING => 'DIFF', COMPRESSION => 'SNAPPY', BLOCKSIZE => '32768}

MySQL

CREATE TABLE NGSIM ( ID								 INTEGER NOT NULL,
                     Vehicle_ID				 INTEGER NOT NULL,
                     Frame_ID					 INTEGER NOT NULL,
                     Total_Frames			 INTEGER NOT NULL,
                     Global_Time			 BIGINT NOT NULL,
                     Local_X					 DECIMAL(10,3) NOT NULL,
                     Local_Y					 DECIMAL(10,3) NOT NULL,
                     Global_X					 DECIMAL(15,3) NOT NULL,
                     Global_Y					 DECIMAL(15,3) NOT NULL,
                     v_length					 DECIMAL(10,3) NOT NULL,
                     v_Width					 DECIMAL(10,3) NOT NULL,
                     v_Class					 INTEGER NOT NULL,
                     v_Vel						 DECIMAL(10,3) NOT NULL,
                     v_Acc						 DECIMAL(10,3) NOT NULL,
                     Lane_ID					 INTEGER NOT NULL,
                     O_Zone						 CHAR(10),
                     D_Zone						 CHAR(10),
                     Int_ID						 CHAR(10),
                     Section_ID				 CHAR(10),
                     Direction				 CHAR(10),
                     Movement					 CHAR(10),
                     Preceding				 INTEGER NOT NULL,
                     Following				 INTEGER NOT NULL,
                     Space_Headway		 DECIMAL(10,3) NOT NULL,
                     Time_Headway			 DECIMAL(10,3) NOT NULL,
                     Location					 CHAR(10) NOT NULL,
                     PRIMARY KEY(ID));

MongoDB

db.createCollection("NGSIM")

Lindorm

# lindorm-cli
CREATE TABLE NGSIM ( ID								 INTEGER NOT NULL,
                     Vehicle_ID				 INTEGER NOT NULL,
                     Frame_ID					 INTEGER NOT NULL,
                     Total_Frames			 INTEGER NOT NULL,
                     Global_Time			 BIGINT NOT NULL,
                     Local_X					 DECIMAL(10,3) NOT NULL,
                     Local_Y					 DECIMAL(10,3) NOT NULL,
                     Global_X					 DECIMAL(15,3) NOT NULL,
                     Global_Y					 DECIMAL(15,3) NOT NULL,
                     v_length					 DECIMAL(10,3) NOT NULL,
                     v_Width					 DECIMAL(10,3) NOT NULL,
                     v_Class					 INTEGER NOT NULL,
                     v_Vel						 DECIMAL(10,3) NOT NULL,
                     v_Acc						 DECIMAL(10,3) NOT NULL,
                     Lane_ID					 INTEGER NOT NULL,
                     O_Zone						 CHAR(10),
                     D_Zone						 CHAR(10),
                     Int_ID						 CHAR(10),
                     Section_ID				 CHAR(10),
                     Direction				 CHAR(10),
                     Movement					 CHAR(10),
                     Preceding				 INTEGER NOT NULL,
                     Following				 INTEGER NOT NULL,
                     Space_Headway		 DECIMAL(10,3) NOT NULL,
                     Time_Headway			 DECIMAL(10,3) NOT NULL,
                     Location					 CHAR(10) NOT NULL,
                     PRIMARY KEY(ID)) ;

データ圧縮結果

image.png

データベース

Lindorm

(zstd)

Lindorm

(辞書ベースの圧縮)

HBase

(SNAPPY)

MySQL

MongoDB

(SNAPPY)

MongoDB

(zstd)

テーブルサイズ

995 MB

818 MB

1.72 GB

2.51 GB

1.88 GB

1.50 GB

ログ

このシナリオでは、Web サーバーログの次のデータセットがデータ圧縮テストに使用されます: Zaker, Farzin, 2019, "Online Shopping Store - Web Server Logs", https://doi.org/10.7910/DVN/3QBYB5, Harvard Dataverse, V1

データの準備

オンラインショッピングストア - Web サーバーログ ページからログデータファイル access.log をダウンロードします。データファイルには 1,036 万行のデータが含まれており、サイズは 3.51 GB です。ログファイルのデータ行の例を次に示します。

54.36.149.41 - - [22/Jan/2019:03:56:14 +0330] "GET /filter/27|13%20%D9%85%DA%AF%D8%A7%D9%BE%DB%8C%DA%A9%D8%B3%D9%84,27|%DA%A9%D9%85%D8%AA%D8%B1%20%D8%A7%D8%B2%205%20%D9%85%DA%AF%D8%A7%D9%BE%DB%8C%DA%A9%D8%B3%D9%84,p53 HTTP/1.1" 200 30577 "-" "Mozilla/5.0 (compatible; AhrefsBot/6.1; +http://ahrefs.com/robot/)" "-"

テストテーブルの作成

HBase

create 'ACCESS_LOG', {NAME => 'f', DATA_BLOCK_ENCODING => 'DIFF', COMPRESSION => 'SNAPPY', BLOCKSIZE => '32768}

MySQL

CREATE TABLE ACCESS_LOG  ( ID        INTEGER NOT NULL,
                           CONTENT   VARCHAR(10000),
                           PRIMARY KEY(ID));

MongoDB

db.createCollection("ACCESS_LOG")

Lindorm

# lindorm-cli
CREATE TABLE ACCESS_LOG  ( ID        INTEGER NOT NULL,
                           CONTENT   VARCHAR(10000),
                           PRIMARY KEY(ID));

データ圧縮結果

image.png

データベース

Lindorm

(zstd)

Lindorm

(辞書ベースの圧縮)

HBase

(SNAPPY)

MySQL

MongoDB

(SNAPPY)

MongoDB

(zstd)

テーブルサイズ

646 MB

387 MB

737 MB

3.99 GB

1.17 GB

893 MB

ユーザー行動

このシナリオでは、Alibaba Cloud Tianchi から取得した次のデータセットがデータ圧縮テストに使用されます: IJCAI-15 のショップ情報とユーザー行動データ

データの準備

ユーザー行動データセットページ から data_format1.zip パッケージをダウンロードし、テストに user_log_format1.csv ファイルを使用します。このファイルには 5,492 万行のデータが含まれており、サイズは 1.91 GB です。次の表に、ファイルのデータ構造を示します。

user_id

item_id

cat_id

seller_id

brand_id

time_stamp

action_type

328862

323294

833

2882

2661

829

0

328862

844400

1271

2882

2661

829

0

328862

575153

1271

2882

2661

829

0

テストテーブルの作成

HBase

create 'USER_LOG', {NAME => 'f', DATA_BLOCK_ENCODING => 'DIFF', COMPRESSION => 'SNAPPY', BLOCKSIZE => '32768}

MySQL

CREATE TABLE USER_LOG  ( ID            INTEGER NOT NULL,
                         USER_ID       INTEGER NOT NULL,
                         ITEM_ID       INTEGER NOT NULL,
                         CAT_ID        INTEGER NOT NULL,
                         SELLER_ID     INTEGER NOT NULL,
                         BRAND_ID      INTEGER,
                         TIME_STAMP    CHAR(4) NOT NULL,
                         ACTION_TYPE   CHAR(1) NOT NULL,
                         PRIMARY KEY(ID));

MongoDB

db.createCollection("USER_LOG")

Lindorm

# lindorm-cli
CREATE TABLE USER_LOG  ( ID            INTEGER NOT NULL,
                         USER_ID       INTEGER NOT NULL,
                         ITEM_ID       INTEGER NOT NULL,
                         CAT_ID        INTEGER NOT NULL,
                         SELLER_ID     INTEGER NOT NULL,
                         BRAND_ID      INTEGER,
                         TIME_STAMP    CHAR(4) NOT NULL,
                         ACTION_TYPE   CHAR(1) NOT NULL,
                         PRIMARY KEY(ID));

データ圧縮結果

image.png

データベース

Lindorm

(zstd)

Lindorm

(辞書ベースの圧縮)

HBase

(SNAPPY)

MySQL

MongoDB

(SNAPPY)

MongoDB

(zstd)

テーブルサイズ

805 MB

721 MB

1.48 GB

2.90 GB

3.33 GB

2.74 GB

概要

上記のシナリオでのテスト結果に基づくと、Lindorm はさまざまな種類の大量のデータをより高い圧縮率で圧縮できます。他のオープンソースデータベースと比較して、Lindorm は、辞書ベースの圧縮が有効になっていない場合でも、大幅に高い圧縮率を提供できます。辞書ベースの圧縮を有効にすると、Lindorm は、オープンソースの HBase の 1 ~ 2 倍、オープンソースの MongoDB の 2 ~ 4 倍、オープンソースの MySQL の 3 ~ 10 倍の圧縮率でデータを圧縮できます。

次の表に、さまざまなシナリオでのテスト結果を示します。

データ

データサイズ

Lindorm

(zstd)

Lindorm

(辞書ベースの圧縮)

HBase

(SNAPPY)

MySQL

MongoDB

(SNAPPY)

MongoDB

(zstd)

注文データ

(TPC-H データセット)

1.76 GB

784 MB

639 MB

1.23 GB

2.10 GB

1.63 GB

1.32 GB

IoV データ (NGSIM データセット)

1.54 GB

995 MB

818 MB

1.72 GB

2.51 GB

1.88 GB

1.50 GB

ログデータ

(サーバーログデータセット)

3.51 GB

646 MB

387 MB

737 MB

3.99 GB

1.17 GB

893 MB

ユーザー行動 (IJCAI-15 データセット)

1.91 GB

805 MB

721 MB

1.48 GB

2.90 GB

3.33 GB

2.74 GB