PostgreSQL

- PostgreSQL

概要

Outline


PostgreSQL を利用できる環境の構築方法について教えてください。

version: '3'

services:
  db:
    image: postgres:14
    container_name: postgres
    ports:
      - 5432:5432
    volumes:
      - db-store:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=passw0rd
volumes:
  db-store:
docker-compose up -d
docker exec -it postgres bash
psql -h localhost -U postgres

参考情報

  1. 【Docker】postgresqlの構築

RDBMS あるいは PostgreSQL のアーキテクチャについて詳しくなるために読んでいる本や資料について教えてください。


ポスグレの主なファイル群について教えてください。

  1. データファイル
  2. Index ファイル
  3. WAL ファイル

補足

MySQL ではトランザクションのことを trx と略すが、ポスグレでは tx と略すっぽい。


TOAST について教えてください。


MySQL のストレージエンジン InnoDB に関する記事 (ストレージエンジンの話 ~InnoDBのredo logをざっくり理解する~) を読んで学んだことを教えてください。

ファイルシステムと write システムコールや fsync システムコールの関係性について教えてください。

全体アーキテクチャ

FileSystem.png

fsync の内部では、ディスクへの書き込み最中にシステムがクラッシュしてもメタデータの整合性が担保できるような書き込み方法を実装しています。

一般的に、データの整合性を担保する書き込み手法として、ジャーナリングもしくは、ファイルシステムのディスク上のレイアウトをログ構造にする、という2通りの方法が用いられています。

それらの仕組みでは、一つのデータをディスクに書き込むだけで、ストレージデバイス上のキャッシュのフラッシュリクエストを複数回発行する必要があり、そのフラッシュリクエストが fsync に時間がかかる主な要因になっています。

来の書き込みたかった場所へデータ書き込むのは、必ず、対応するジャーナル領域のデータが、ストレージデバイスのキャッシュから、永続領域へ移動された後である必要があります。


MySQL の MVCC と InnoDB に関する記事 (MVCCとInnoDBでの実装について)


YouTube の動画


InnoDB における MVCC のガベージコレクションに関する記事 InnoDBのMVCCのガベージコレクションについて を読んで学んだことを教えてください。


WAL がディスクに吐き出されるタイミングについて教えてください。

BTree と B+Tree と InnoDB のインデックスに関して教えてください。(

-BTreeB+Tree
歴史-BTree の派生系
データの格納場所 ルートノード、インターナルノード、リーフノード リーフノード (末端)
特徴  - リーフノード以外のノード (ルートノード、インターナルノード) にはキーを格納する。
特徴  - リーフノードの隣接間はポインタで相互接続される。
特徴  - 等価検索の処理時間が短縮され、特に範囲検索が高速なので Database のインデックスに活用されている。
検索時間  O(log n)O(log n)