Pocket

昨日に引き続いて、Findyで「yokuさん、そーだいさんのMySQLとPostgreSQLの世界について」参加してきました。また、自分の経験上、本業はMySQL、副業はPostgreSQL触っているので、お二人の意見を根堀葉掘聞けて非常に参考になりそうです!

それではイベントレポートしていきましょう!と言いたいところですが、メモ取るのなかなか大変だったので、間違っているところが多いはずです!見つけた際はリプしてもらえると..!

※以下は前回のイベントより!

[2023/05/23][Findy]オブザーバビリティ最前線 〜 事例LTから学ぶ、オブザーバビリティの成熟度〜について参加してきた


イベント概要

https://findy.connpass.com/event/282291/


オープニング・ご挨拶

 

  • yoku0825 @yoku0825
    • 日本MySQLユーザ会
    • 副代表
    • とある企業のDBA。座右の銘は「オラクれない・ポスグれない・マイエスキューエる」
  • 曽根 壮大(そね たけとも) / そーだい @soudai1025
    • 株式会社リンケージ/PostgreSQLユーザ会
    • 合同会社 Have Fun Tech 代表社員、株式会社 Linkage CTO。
    • 数々の業務システム、Webサービスなどの開発・運用を担当
    • 2017に株式会社はてなでサービス監視サービス「Mackerel」のCRE(Customer Reliability Engineer)
    • 株式会社オミカレの副社長/CTOなどを経て、合同会社 Have Fun Techを起業。
    • その後、LinkageのCTOとしてJOINし、HaveFunTechの経営と二足の草鞋を履きこなしている
    • コミュニティでは、Microsoft MVPをはじめ、日本PostgreSQLユーザ会の理事として勉強会の開催を担当し
    • builderscon 2017、YAPC::Kansaiなどのイベントでベストスピーカーを受賞
    • 岡山Python勉強会を主催し、オープンラボ備後にも所属。著書に『Software Design』誌で、データベースに関する連載「RDBアンチパターン」をまとめた『失敗から学ぶRDBの正しい歩き方』を執筆。

今回はLT大会というよりも、事前に質問したい内容をお二人にプルリクエストを送って、雑談形式でお答えするといった形でした。リアルタイムで相談できるのは新しいイベントだ!


MySQLに質問

  • 8.1について
    • 新機能を足すのをやめている
    • テレメトリーのサポートが増えている
  • 8.1はまだ決まっていない
    • 名言はされていない
    • コミュニティで直したよと予想している
    • 普段のチケットのやり取り
  • 8.0のEOLは2年しかいない
    • 次のLTSを待つ
  • PosgreSQLは3ヶ月に一回メジャーマイナーバージョンアップが出る
    • パッチも出る
    • 最新はv15
    • 1年寝かしている
    • RDSも1年遅れている
  • 最新マイナーは追いかけてるか?
    • 新機能がよく壊れる
    • レプリケーションなど
    • MySQLも触ってるから壊れる
    • MySQL5.5世代 yokuさん
    • 常に5.1とか4.0などがあった そーだいさん
  • バージョンアップは飽きない
  • 新機能は大好き


PostgreSQLに質問

 

  • BRINどうですか
    • https://www.postgresql.jp/docs/9.5/brin-intro.html
    • 使ってる人いる
    • indexが小さくなる
    • パフォーマンスは劣化していない
    • INSERTも早くなる
    • 大量データには効く
    • 範囲で検索することが多い
    • 履歴データ、ゲームの履歴
    • アイテムの履歴
    • 相性がいい
    • RDSはストレージの容量気にしない
    • オンプレとかは聞きそう
    • UPDATEが多いのは有効的ではない
  • GiNで使う場合
  • PosgreSQLはバージョンアップのドキュメントが手厚い
    • 日本語訳すごい
    • 誤字脱字はプルリク出してーー
    • yokuさんはマニュアルをDropboxに入れてる

勉強方法について教えてほしい

 


MySQL 8.0のオススメニッチ機能は?

  • MySQL8.0のオススメニッチ機能は?
    • RLS(Row Level Security)
    • ACLの評価がタイト
    • WordPressみたいなマルチテナント型
    • 9999行ぶん回るので危険
    • 使わないと思う
  • マルチテナントはPosgreSQLどう?
    • テナントごとにスキーマを分けられる
    • soudaiユーザ→soudaiスキーマの流れ
    • 1つのDBはローレベルスキーマを使う
    • where区にindex効いていればOK
    • user tableがcompany tableを見せない場合、フィルターを書くと重い
    • MySQLと比べてPosgreSQLはサブクエリは重くない
    • 1億件でもindex書けば100msで帰ってくる
    • user_idにconmany_idをつければいい
  • Row Level Security(PosgreSQL)
    • 有効にするテーブルを使い分けれる
    • スイッチ・オンできる
    • オフで別のやり方ができる
    • 設計がindex効いていれば問題なし
  • PosgreSQLは格納したい
    • 他のところにアクセスしたくない場合は別でわけて集めていた
    • はじめから分割してあとから行うのはMySQLと違う
  • MySQLはシャーディングしやすい
    • テーブルスキャンする前提はPosgreSQLが多い
  • 他にニッチは?
  • Window 関数が8.0対応
  • デュアルパスワード
    • 1アカウントに2つパスワードを設定できる
    • パスワードがGitHubにpushされてもユーザーを作り直さなくていい
    • リリースが終わったら古いパスワードを消す
    • 数分間稼げる
  • CLONE プラグイン
    • 既存のMySQLの全データを手軽にコピーする機能

PostgreSQLの開発について

  • 日本も増えてきた
  • 企業媒体がない
  • 完全にコミュニティで作っている
  • 少なくてもコントリビューターになれる
  • 自分で作った機能をメンテしている
  • 条件が書いている
    • https://wiki.postgresql.org/wiki/Committers
    • MySQLもプルリク出すのもサインでOK
    • オラクルコントリビューターアグリーメント
    • コミッターは中の人がコミットしている
    • 中の人から声をかけてもらうしかない
    • Facebookとか
    • forkして使う人が多い
  • 最近Maria DBはどう?
    • maria-discuss
    • コミュニティも活動している
  • 相談相手が多い方がいい
  • コミュニティで取り込まれないのもあるけどどうなっているのか
    • マージすることによって壊れるケースがある
    • テストが足りないのもマージされない
    • PosgreSQLはfeatureフリーズする
    • 今年の機能追加一覧
    • テストに参加して十分に枯れてたらマージされる
    • テストしていないとrejectされる
  • ストレージエンジン
    • 内部に関わるのは破壊的変更を伴うのでNG
    • 差し替えるAPIを用意して段階的に時間がかかる
  • パーティションがいい例
    • 10ぐらいから出た
    • 13から使える
    • 論理レプリケーションも鳴らしてミニマムから機能追加していった
    • 使い物になるまで時間がかかる
  • テストは誰でもできる
  • PosgreSQLはSlackへ!


Q&A

  • 8.0でyokuさんを悩ませたのは?
    • collationが違うとjoinできない
    • collationの概念で大文字小文字の区別がカラムレベルで定義できる
    • 今まではlatinだったのがutf8mb4
    • utf8mb4のデフォルトの照合順序がutf8mb4_general_ci からutf8mb4_0900_as_ci に変更
    • はとぱとばを区別できない
    • 日本語検索いないだろうけど好きではない
    • CIとCI同士は優先できない
    • SET GLOBALしかできない
    • インフラ的にはSET PERSIST で押し込むのがベスト
  • collationのおすすめは?
    • デフォルトが良い
    • ai_ci使えばいい
    • 区別したいならbinを使えばいい
    • 日本語入れたいならbinを使えばいい


現代のMySQLでPrimary Keyのオススメは?

  • MySQLはUUIDはやめた方がいい
    • indexが非効率になる
    • post uuid型もある
    • MySQLはBIGINT
    • シャーディングならtimestamp シャードid
    • 自分たちの要件に合わせよう
    • 普通ならBIGINTでAUTO_INCREMENT
    • AUTO_INCREMENTはあとから足すのは不向き
    • UNIQUE KEYで保護する

MySQLはKVSの意図を知りたい

  • 主キーで引いてくるように使おう
    • Key Value StoreならMySQLがあっている
    • ordey by limitのindexが早い
    • 最適化されてるから早い


まとめ

 

お二人のお話を聞いて、2つのDBのメリット、デメリットを知れるきっかけとなりました。PosgreSQLは大規模なデータセットを処理するために向いていたり、技術選択としてはサービスの要件によって合わせることが大事ですね。デュアルパスワードやCLONE プラグインは全く知らなかった。。まさにニッチ。コミュニティも積極的に活動してみようかしら!むちゃくちゃタメになったので、定期的にイベント開催してほしいですね!ありがとうございました〜〜!

Pocket


adachin

1989年生まれのSRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWS/Azureでのインフラ構築、Docker開発環境の提供、Kubernetes保守、インフラコード化、新技術の検証、リファクタリング、セキュリティ強化などを担当している。個人事業主では数社サーバー保守とベンチャー企業のSREインフラコンサルティングやMENTAで未経験者にインフラのコーチング/コミュニティの運用を実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。

0件のコメント

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください