LoginSignup
5
7

More than 1 year has passed since last update.

Redshiftは破壊と再生を繰り返した方がいいよ

Last updated at Posted at 2016-06-29

最近、Redshiftを検討するため調べたメモです.
RedshiftはInsertやUpdate、さらにはカラム型なので1行単位のSelectが遅いらしいです. PostgreSQLと互換があると言っても同じように使えません.
同じ感じに使うと遅くて辛い目にあいます.

DBとして役たたない感じに聞こえますが集計等が得意なので、
それ以外は割り切った使い方をした方が良い感じです.

この記事で書かれている内容は以下のスライドで アトミック洗い替え を検証したものになります.

データ作成と集計を分離する

検証するためにテーブルsample1を作成します.
このテーブルは集計用で更新系のクエリは発行しません.

BEGIN;
CREATE TABLE sample1 (c1  BIGINT NOT NULL);
INSERT INTO sample1 VALUES (1), (2);
SELECT * FROM sample1;
COMMIT;

次にテーブルsample1_newを作成します.
このテーブルは更新系で具体的にはInsert若しくはCopyでS3等からデータを投入するようにします.

BEGIN;
CREATE TABLE sample1_new (c1  BIGINT NOT NULL);
INSERT INTO sample1_new VALUES (11), (12);
SELECT * FROM sample1_new;
COMMIT;

次にsample1sample1_newを入れ替えてロールバックしてみます.
トランザクション内ではsample1の内容が変わっていることが確認できました.

BEGIN;
ALTER TABLE sample1 RENAME TO sample1_old;
ALTER TABLE sample1_new RENAME TO sample1;
SELECT * FROM sample1; -- 11, 12
ROLLBACK;

ではロールバックは正しくできているか確認してみます.

BEGIN;
SELECT * FROM sample1; -- 1, 2
COMMIT;

今度は入れ替えをコミットします.

BEGIN;
ALTER TABLE sample1 RENAME TO sample1_old;
ALTER TABLE sample1_new RENAME TO sample1;
COMMIT;

Selectした結果が入れ替わっているか確認してみます.

BEGIN;
SELECT * FROM sample1; -- 11, 12
COMMIT;

この様な感じでアトミックにデータ更新ができました.
長所と短所を把握して設計してあげれば実用に使えます.

ちなみに、トランザクション中、他のトランザクションの開始を確認したところ、先に開始したトランザクションが終了するまで待たされます.

5
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7