Upgrade to Pro — share decks privately, control downloads, hide ads and more …

互換性のある(らしい)DBへの移行など考えるにあたってたいへんざっくり

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 互換性のある(らしい)DBへの移行など考えるにあたってたいへんざっくり

「データベースを異なる環境や互換性のあるマネージドサービスなどに移行する際、どういうことを考えてるか、幅広い層に向けて話してください」みたいなことをいわれたのでかきました

Avatar for Takanori Sejima

Takanori Sejima PRO

March 31, 2026
Tweet

More Decks by Takanori Sejima

Other Decks in Technology

Transcript

  1. アジェンダのようなもの - まず最初に - 次に、データの保護やバックアップについて - 振る舞いについて - トランザクション関連 -

    設計思想に起因する性能特性 - 性能 - メンテナンスやバージョンアップ - まとめのようなもの 8
  2. 「◯◯と互換性 100%」 - 独自実装であれば、そもそも互換性100%とは 普通ならない。 - 互換性100%と言ってる場合は、同じクライアントライブ ラリが使える == プロトコル的に互換性がある程度で、

    実際の機能や挙動、性能特性までは互換性がない。 - MySQLからforkしたものであっても、独自実装 の部分で振る舞いが変わったりする。 14
  3. 独自実装であるがゆえのデメリット - 本家との差分が大きいということは、本家で新し いメジャーバージョンが出たとき、追随するのに 時間がかかる - 例えばMySQLは8.0のときに Coding Guideline などが

    一気に変わってソースコードがかなり書き直された。 MySQLをforkしている各社のマネージドサービスで差分 が大きいと、こういうとき追随するのが大変になる。 18
  4. - 例えば、RDS for MySQL 8.0の標準サポート終 了は2026年7月31日、CloudSQL for MySQL 8.0の拡張サポート開始日は2027年1月1日と なっている。

    - 自分たちが利用しているMySQL互換のマネージドサー ビスが他にもあって、それが8.4対応できていなければ、 8.0と8.4の環境両方をメンテナンスし続けることになる。 20
  5. EUC-JP <-> Unicodeの不可逆変換 - MySQLで具体的な例を挙げると - EUC-JP 0xA1C0 -> U+005C

    REVERSE SOLIDUS - https://gist.github.com/sejima/40174345ff2714e7 53d2fd448696a618#file-gistfile1-txt - EUC-JP 0x8FA2B7 -> U+007E TILDE - https://gist.github.com/sejima/40174345ff2714e7 53d2fd448696a618#file-gistfile2-txt - EUC-JPに戻すとき、0xA1C0 や 0x8FA2B7 で はなく 0x5C や 0x7E になる。 34
  6. 認証プロトコル - MySQL 9.0でmysql_native_password が削除 された。 - MySQL 9.x 以降では

    caching_sha2_passwordが必須になったが、 この振る舞いもプログラミング言語ごとに異な る。このことを想定した事前調査などはやった方 が良い。 44
  7. トランザクション分離レベル - MySQL互換を謳っていたとしても、defaultのト ランザクション分離レベルはMySQLと同じなの か?挙動もMySQLと同じなのか? - 例えば、TiDBのドキュメントには Difference between TiDB

    and MySQL Repeatable Read やDifference between TiDB and MySQL Read Committed といった 項目がある - Aurora MySQL でREAD COMMITTEDを使う場合、 readerの挙動はMySQLと完全には一致しない。 48
  8. - ANSI/ISO SQL標準で SERIALIZABLE、 REPETABLE READ、READ COMMITTED、 READ UNCOMMITTEDといった4種類のトラ ンザクション分離レベルが定義されている。た

    だ、それぞれの振る舞いは、MySQL互換云々 以前に、そもそもRDBMSごとに微妙に異なった りする。 49
  9. 例:Aurora MySQL - Aurora MySQL は undo log を writer

    と reader で共有するアーキテクチャなので、 autocommit=1で運用することや、長いトランザ クションを避けることを推奨するホワイトペー パーが公開されている。 - https://d1.awsstatic.com/whitepapers/ja_JP/RDS/am azon-aurora-connection-management-handbook.pdf 52
  10. 例:TiDB - Transaction too largeでエラーになるケース や、REPEATABLE READでLost Updateが発 生してしまうケースなど、Cygamesさんの丁寧 な解説資料が存在します。

    - 【TiDB GAME DAY 2024】TiDBにおけるテーブル設計 と最適化の事例 - 【TiDB GAME DAY 2025】Shadowverse: Worlds Beyond にみる TiDB 活用術 53
  11. failover時の再接続処理 - Amazon Aurora では、フェイルオーバーを高速 化して数秒程度の切り替えできる Advanced JDBC Wrapper Driver

    が公開されている - SLAによってはサービス停止なしでswitch over など検討できる可能性も出てくるので、クライア ントライブラリ込で評価するのはとても大切。 79
  12. 周辺のサービス - Amazon Auroraを使う際にAdvanced JDBC Wrapper Driverが使えなかったとしても、 Amazon RDS Proxy

    を使うことでfailoverの時 間を短縮できたりもする。 - 周辺のサービスも込みで評価することは大切。 80
  13. References - ArkEdge Space Blog | できれば知らずに済ませたかった Aurora DSQL非互換集 -

    MySQL Blog Archive | MySQL 8.0 Source Code Improvements - 組織をランサムウェアの脅威から守るためのベスト プラク ティス - MySQL Blog Archive | MySQL 8.0: ひらがなカタカナを判 別する日本語用Collation 86
  14. References - tmtms のメモ | MySQL と PostgreSQL のコレーション -

    【TiDB GAME DAY 2024】TiDBにおけるテーブル設計と最 適化の事例 - 【TiDB GAME DAY 2025】Shadowverse: Worlds Beyond にみる TiDB 活用術 - トランザクションを「本気で使いこなす」ための必須知識。 PostgreSQLコミッターが教える活用術 87
  15. References - Cloud Spanner の自動生成主キーを使ってみる - Amazon Aurora 向け Advanced

    JDBC Wrapper Driver のご紹介 - Amazon RDS Proxy を使用したアプリケーションの可用性 の向上 88