コンテンツにスキップ

RDBを取り巻くアレコレ(AWSを中心に)

データベース以前

- ファイルがデータストア
- 今もユニケージ開発手法はコレ
    - [ユニケージ開発手法](ユニケージ開発手法)

データベース登場

DBMS色々

- ネットワーク型DBMS
    - 1964: 世界初の商用DBMS「IDS」はネットワーク型(GE製)
- 階層型DBMS
    - メインフレーム用に生き残っている
    - 1966: IMS(IBM製)
        - [https://www.ibm.com/docs/ja/integration-bus/9.0.0?topic=ims-information-management-system](https://www.ibm.com/docs/ja/integration-bus/9.0.0?topic=ims-information-management-system)
- カード型DBMS
    - FileMaker
- XML-DBMS
    - ドキュメント指向DBのご先祖感...
- オブジェクト指向DBMS
    - Smalltalk用に生きてるらしい
        - [GemStone](https://gemtalksystems.com/products/gs64/)

RDB

  • 関係(Relational)DB
    • 1969: コッド氏が「A Relational Model of Data for Large Shared Data Banks」という有名な論文を発表
    • Oracle
      • 1979: 世界初の商用RDBMS
    • MySQL
    • PostgreSQL
    • Amazon RDS
      • Amazon Aurora

NoSQL("No SQL" -> "Not Only SQL")

  • RDBでは耐えきれない読み込み・書き込みに耐えられるようにしたい
    • 結果整合性、トランザクションレスを受け入れればスケーラブルにできる
      • ACID特性 <-> BASE特性
  • 柔軟にスキーマを変更したい
    • テーブル間の結合はできない代わりにスキーマレス
  • 24時間365日の可用性を確保したい
  • ドキュメント志向DB
    • MongoDB
      • LAMP -> MEAN(MongoDB + Express + AngularJS + Node.js)
    • Amazon DocumentDB
  • KVS
    • memcached
    • Redis
    • Apache Cassandra
    • Amazon DynamoDB
  • グラフ指向DB
    • Amazon Neptune
    • Neo4j
  • 時系列DB
    • Amazon Timestream
  • 台帳DB
    • Amazon QLDB

閑話休題: SQLっぽいクエリを投げられるPartiQL

ビッグデータ(最近聞かないねぇ...機械学習方面に食われたかな)

- RDBで扱うには大量のデータを実用的な時間で集計して分析したい

NewSQL: 強い整合性を持ち、ACIDトランザクションをサポートする、(地球規模の)分散型のSQLデータベース

閑話休題: Amazon AuroraはNewSQLか?

- [Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases](https://assets.amazon.science/dc/2b/4ef2b89649f9a393d37d3e042f4e/amazon-aurora-design-considerations-for-high-throughput-cloud-native-relational-databases.pdf)
- [https://gyazo.com/239503243de55340269b78ecc29c41ce](https://gyazo.com/239503243de55340269b78ecc29c41ce)
- (地球規模の) の部分を満たしていないのでNewSQLではない?
    - 3AZに2ノードずつ分散配置
    - グローバルロケーションは選択可能
        - 1つのプライマリAWSリージョンと最大5つの読み取り専用セカンダリAWSリージョン
        - クロスリージョンフェイルオーバーが可能
- 書き込みのスケーラビリティがないのでは?
    - Aurora Multi-Masterはあるが、かなり制約が厳しい
        - MySQL5.6コンパチのみ
            - >通常、単一クエリのパフォーマンスは、同等のシングルマスタークラスタのパフォーマンスよりも低くなります。
            - >Aurora マルチマスタークラスターは、継続的な可用性のユースケースに非常に特化しています。
            - [https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-multi-master.html](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-multi-master.html)
- MySQL/PostgreSQLの顔をしているが、裏側にはEBS/S3/DynamoDB/Route53/SWF(?)がある

閑話休題2: RDB on k8s

- プロプライエタリなSpannerではなく、MySQLやPostgreSQLを可用性高く使いたい
- [MOCO - Kubernetes 用 MySQL クラスタ運用ソフトウェア](https://blog.cybozu.io/entry/moco)

Next?

- [https://planetscale.com/blog/nonesql-all-the-devex](https://planetscale.com/blog/nonesql-all-the-devex)
    - Developer Experienceの高いDBとはどんなものか?
  • スキーマのバージョン管理
    • アプリケーションと同じようにDBのスキーマがGitライクにバージョン管理される
    • カジュアルにDDLを変更できることで、アプリケーションの開発ワークフローと同様にスキーマ変更ができる
    • 複数の開発を並行で実施することを許容できる?
  • 自動チューニング
    • index付与のリコメンデーション
    • スパイクアクセスに対応できるAutoScaling
      • 自動でコスト最適化されてほしい
  • なぜ?
    • 事前の設計は重要だが、実装やフィードバックから得られた設計はもっと重要
      • 後段で得られた知見を活かすアジャイル開発のプラクティスをRDBにも適用したい
      • ドメイン知識をアプリケーションに反映し続けるDDDのプラクティスをRDBにも適用したい
        • より良い名前にカラム名を変更したり、追加、削除したい
    • 一方で保守コストは下げたい
      • 小さなチームで小さなDBを管理する
      • 開発速度を上げるために保守コストは低く保ちたい
    • マイクロサービスでは大きな単一のRDBはアンチパターン
      • 複数チームで一つのRDBを共有すると、チームの責任の境界が曖昧になる
      • コモンズの悲劇が起きる

知識不足と興味不足で書けなかったこと

  • Oracleの進化の歴史
    • Oracle RAC
    • Exadata
    • Oracle cloud
  • MySQL Cluster
  • DB as a service
  • In/On memory DB

参考

- [https://www.saiensu.co.jp/search/?isbn=978-4-7819-1390-2&y=2017](https://www.saiensu.co.jp/search/?isbn=978-4-7819-1390-2&y=2017)