列指向データベースのメリットとデメリット

列指向データベースとは何か?

まず、従来のRDMS(MySQL、Postgress、Oracleなど)は行指向データベースと呼ばれています

これは行ごとの処理が基本(Insert, Update, Delete)が基本となり、列ごとの集計(MIN、MAX、AVG)は関数として処理された結果として抽出されます。

  • (左)行指向データベースは,行単位でデータを保持,また取り出しを行います。

  • (右)列指向データベースは列単位でデータを取得,取り出しを行います。

対して列指向データベースとは、主にデータ分析のために最適化されたデータベースです。

大規模なデータに対する集計処理を高速に行うことが可能です。

列指向データベースのメリット

  • モデリング

    • 列指向データベースはデータ分析のために最適化されたデータベース

列指向データベースのデメリット

  • 整合性

  • Queryが微妙に異なる

    • 条件句

      • != (非等価)

      • NOT (論理否定)

      • OR (論理和

      • IS NULL/ IS NOT NULL (NULL比較)

    • JOIN (結合)

    • OFFSET (相対位置指定)

列指向データベース

  • Cassandra

  • Scylla

  • Amazon SimpleDB

サンプルコマンド集

キースペースの作成

キースペースとは平たく言えばスキーマのこと。

名前空間という認識でよい。

CREATE KEYSPACE user_keyspace WITH replication = {'class': 'SimpleStrategy','replication_factor':3};

これでuser_keyspaceというキースペースができた。

キースペースを確認する。

DESC KEYSPACES
cqlsh:user_keyspace> DESC KEYSPACES



keyspace_name  system_distributed  system_views

system         system_schema       system_virtual_schema

system_auth    system_traces       user_keyspace

キースペースの使用

キースペースを実際に使用するにはUSEコマンドを使用する。

USE user_keyspace ;

テーブルの作成

通常のsqlと同様、create table文を使用する。

CREATE TABLE user_keyspace.users ( 

                 userid int PRIMARY KEY,

                 first_name text,

                 last_name text);

データの挿入

INSERT INTO users (userid ,first_name, last_name) VALUES (1, 'taro', 'tanaka');

データの確認

SELECT * FROM table_name ;
cqlsh:user_keyspace> SELECT * FROM users ;



 userid | first_name | last_name

--------+------------+-----------

      1 |       taro |    tanaka



(1 rows)

page:https://minegishirei.hatenablog.com/entry/2023/07/21/090604