MySQL!!ご挨拶エンジニアチームの杉山です。あと1ヵ月程で今期も終了し、新しい期に向けて準備を進めています。来期は、更に多くの方にLCLのサービスをより快適に利用して頂く為に、エンジニアからも積極的にアイデアや技術を活用したソリューションを提案し、サービスに実装していければ良いかなと思っています。アプリケーションやインフラもビジネス側のニーズとバランスを取りながら、日々整備していく必要がある状態です。日々自発的に取り組んでくれているので、自分の方は引き続き経営陣と調整しながらサービスの成長に努めて行こうと思ってます。やるべき事は多々あるので、5割弱はエンジニアとしても貢献出来ればと思い、経験を積んで来たデータベースの知見を活かそうと、DeepにMySQL中心の生活を送っていた自分が、LCLのスタンダードデータベースである、PostgreSQLを少しずつ勉強しています。バス比較なびの利用者の推移これまで、ネットサービスとベンダーの間で半々位で仕事をしてきましたが、ネット関連の会社では9割以上の業務をMySQL中心に仕事をさせて頂いてきました。「とてもシンプルなデータベースだな~」と当時思った印象があります。MySQLは自分にとって最も付き合いが長く、深く知見があるデータベースです。そんな自分がPostgreSQLと向き合うようになって、日々戸惑いながら勉強しているので簡単ですがまとめてみました。基本的には、「MySQLの場合はこうやって対応するけど、PostgreSQLではどうなんだろう?」といった感じで頭の中で常に比較しながら確認し対応しています。Systemsに買収され、現在は2010年から、Oracleデータベースを販売する、Oracle社の傘下で開発を継続しているオープンソースのデータベースです。JOIN等々様々に機能が5.7に続き、改良されている状況です。PostgreSQLと同じくオープンソースですが、様々な用途に活用出来る洗練されたデータベースになってきたなという印象です。グローバルでは、Oracleデータベースに続き、2番目に利用されているデータベースにまで成長しています。Worklogを見ると、MySQLの開発状況を確認する事が出来ます。大きな違和感は感じていませんが、やはりPostgreSQLの管理方法はOracleに近いなという印象を受けています。データベースとスキーマデータベースとスキーマがデータベースシステム間で異なることは、概念としては理解していましたが、実際に機能による違いを活用して工夫した構成を組むところまでイメージ出来ていません。その為、基本的な違いを少し整理してみました。MySQLではスキーマはデータベースと同義。所有者の概念がありません。同じデータベースに同じ名前のオブジェクトを作成出来ない。PostgreSQLでは、データベースとスキーマは異なり、データベースには複数の名前付きスキーマが含まれ、異なるスキーマには同じデータベースでも同一名のオブジェクトを作成可能。MySQLとPostgreSQLのスキーマ比較PostgreSQLで同じデータベースに同じ名前でオブジェクトを作成し処理しても競合が発生しない。以下の例では、同じデータベースに同じオブジェクト名でオブジェクトを作成して異なったユーザーで処理しています。ユーザー毎にDefaultスキーマを変更しています。ここでは、別々のユーザーで接続し、同じデータベースの同じテーブル名に対してDMLを実行していますが、それぞれ異なったオブジェクトで処理している事が確認出来ます。ユーザーが異なれば、データベース名、テーブル名でも異なったデータベースオブジェクトに対して処理する事が出来ます。MSQLの場合は少なくともデータベースを変更しないと同じオブジェクト名は作成出来ないので少し戸惑う所です。不明なパラメータは適宜確認して対応していく必要があるので主要なパラメータを確認しつつ対応していきたいと思います。MySQLもパラメータが500以上ありますが、殆どをDefaultで利用してきたので変更した事があるのは1/10程度でした。PostgreSQL12でも300以上のパラメータがありました。これも使い切る事は不可能に近いでしょう。メモリーやI/O処理等の主要なパラメータだけ抑えておきたいと思います。variables;パラメータに関しては、ここら辺の便利なサイトを利用すると短時間で効率良く確認する事が出来ます。PostgreSQLは、SQLコマンドでロール(ユーザー)を作成すると同時に、pg_hba.confやpostgresql.confなどで認証方法やアクセス出来るホストを設定するので最初に若干戸惑いました。どちらもアクセス出来るユーザー、ホスト、IP、サブネット、認証方法等を設定するのでやる事は同じですね。バックアップ無しではサービス運用する事は出来ないし、安心出来ないかと思います。どんな、データベースを管理するにしても、バックアップ・リカバリー方法の理解と検証は必要ですね。Sugiyamaレプリケーションネットでサービスを提供していると、レプリケーションは必須な機能だと思っていますし、実際にこれまでレプリケーションを運用しない環境で仕事をした事はありませんでした。MySQLでは、自分が利用し始めたMySQL4.xの時代には既にレプリケーションが実装されていたので、MySQLが広く普及した要因の一つだと思っています。便利な機能ですが、きちんと仕様を理解していないと思わぬところで痛い目に合うのでPostgreSQLでのレプリケーションも経験を積んでいきたいと思ってます。PostgreSQLにレプリケーションが実装されたのは、9.xの時代からだと認識しています。MySQLよりも遅いですが、細かな設定も出来ると同時になかなか安定していて良いなと言った印象です。MySQLはメジャーバージョンが1つ異なっても、レプリケーションをオフィシャルにサポートしていますが、PostgreSQLは若干厳しいという印象です。段階的にアップグレードが厳しいといった印象を受けているので、タイミングが合えば、最適なアップグレード方法をPostgreSQLのプロフェッショナルな方々に聞いてみようと思っています。Sugiyama以上、簡単ですがMySQLとPostgreSQLの違いの一部を少しですがまとめました。今後も、少しずつまとめていこうと思っています。基本的な業務はマネージメントなので、常にビジネスにフォーカスを置きつつ、様々な技術とユーザーのニーズをマッチさせていく事に時間を割いていくのであまり時間取れませんが、合間合間で少しずつ対応して行きたいと考えてます。今後とも、宜しくお願い致します。引き続き、生産性向上に励む仲間を絶賛募集中です。LCLエンジニアチームの杉山です。技術開発部の杉山です。技術開発部の杉山です。1検索はてなブログをはじめよう!lcl-engineerさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。