はてなキーワード: MySQLとは
若手社員の要望でクラウドストレージを導入。ノートPC持って社外で作業する人も多いから、便利になると思った。
40代以上からは「メールで十分」「ログインとかめんどくさい」と不評だったので、エクスプローラーから直接使えるように自作アプリまで作って、それぞれのPCでAWSにマウントできるようにした。
導入から1年。
仲のいいおじさん社員が、USBにデータを入れて、車で1時間かけて別部署へ持ってきた。僕の目の前で。にこにこで。
もちろん悪気はない。むしろ「えらいだろ?」くらいの顔だった。
はあ。転職しようかな。
機械・車両管理(どこに何があるかダッシュボード表示、移動したらLINEやSMSで通知)
使ってるのはC++とかRailsとかPythonとかMySQLとか。インフラはAWS中心で、herokuで実験。LINE APIとかNTTのCPaaSも叩いてる。
一人で社内システムを頑張ってたつもりだったけど
USBで運ぶおじさんの前では全部無力だった。
プログラマーって聞くと今の若い人は稼げる業種って思うかもしれない。でも昔は、そのイメージとはまるで真逆だったんだよ。
90年代初頭、日本はバブルの余韻が残ってたけど、IT業界なんてまだオタクの延長みたいに見られていた。NECのPC-9801シリーズがオフィスの定番で、OSはMS-DOS 3.3とか、その後にWindows 3.1が出ておお、マウスで操作できる!なんて騒がれていた時代だ。
もちろんインターネットなんて一般にはまだ普及してなかった。せいぜいパソコン通信。ニフティサーブ、PC-VAN、アスキーネット。回線速度は2400bps。ピーヒョロロっていうモデム音が夜中の住宅街に響いていた。
俺らはそういう環境でC言語やアセンブラを叩いてたんだ。コンパイルに時間がかかるから、トイレに行って戻ってきてもまだ終わってなかったりした。
今みたいにGitHubでコードを共有なんて夢のまた夢。ソースのやり取りはフロッピーディスクで手渡しだ。5インチのぺらぺらのやつな。運が悪いと磁気にやられて一発で飛ぶ。だから俺たちはよくフロッピー神社に参拝とか冗談言ってた。
正社員で手取り20万ちょっと。下請けやフリーランスだともっと安い。今でいうSESの走りみたいな人売りも普通にあった。客先常駐でCOBOLやらされてバグが出れば徹夜。オフィスに寝袋持ち込んで、カップヌードルと缶コーヒーの山を築く。徹夜明けに食う吉野家の牛丼が唯一のご褒美。今みたいにエンジニアは市場価値が高いなんて考え方はなかったからな。ただの駒だよ。
仕事は増えるのに単価は下がる。Windows 95の発売で世の中はインターネット元年なんて浮かれてたけど俺たちプログラマーの現実は泥臭いコード修正の山。Visual Basic 6.0やDelphiが出て「これで開発効率が上がるぞ」なんて言ってたが、結局は納期に追われるだけ。SunのJavaが登場したときも「Write once, run anywhere」なんて夢を見せてくれたけど、実際には動かないアプレットと格闘する日々。
Linuxが台頭してきたのもこの頃だ。
SlackwareやRed Hat Linux 5.2をCD-ROM雑誌付録で手に入れて、夜な夜なインストールに挑戦。LILOがうまく動かなくて起動しない、ネットワークカードを認識しない、X Windowが真っ黒。そんな壁に何度もぶつかっては2ちゃんねる(当時はまだ草の根BBSが多かったが)やUNIX USER誌を読み漁って解決する。それが楽しくて仕方なかった。でも金にはならなかった。オープンソースに貢献しても無償の善意で済まされるだけ。Red HatやMySQL ABが上場するまでは、ただのボランティア活動と見なされてた。
今思うと、あの頃は純粋だった。
技術そのものが楽しくて、ASCIIやOh!Xを小脇に抱えて徹夜でコードを書いた。秋葉原でジャンクパーツを漁って自作PCを組み立ててベンチマークの数字で一喜一憂した。
飯代を削ってもSCSIのハードディスクに投資したし、月刊アスキーの付録CD-ROMに入ってたシェアウェアを片っ端から試した。儲けようなんて意識はなかった。ただ、面白いものを作りたかった。
それが今じゃITは完全に拝金主義。コードの美しさより投資家の顔色を見てる。エンジニアもどこが年収高いかばかりで、言語やフレームワークを選ぶ基準が金になっちまった。Pythonが流行るのもAIブームに便乗してのことだし、ブロックチェーンやNFTなんかバブルがはじける前提のネタ探しにしか見えなかった。
もちろん、技術が商業化されて豊かになった面もある。AWSやGCPのおかげで誰でも世界規模のサービスを立ち上げられるようになったし、GitHubやDockerで開発環境も夢みたいに便利になった。だがその一方で楽しいからやるという純粋さはどこへ行ったんだろう。GitHubの草がどれだけ生えてるかが採用基準になる時代。Qiitaに記事を投稿するのも、技術共有じゃなくて転職市場でのポイント稼ぎ。
あの頃には確かに、金ではなく面白さに突き動かされる熱があった。それが今は金の匂いに上書きされてしまったように感じる。
でも稼げなくても、やる価値があった。
今の若いエンジニアたちにその気持ちがどれだけ伝わるかは分からない。
言いすぎたが、MySQL人気が下がり、PostgreSQLが上がってるのは本当やで
ソースな
https://db-engines.com/en/ranking_trend/system/MySQL;PostgreSQL
あー、出た出た。「負荷試験で全部検出できる」っていう過信系エンジニアの典型的自己放尿ね。
それっぽい口ぶりしてるけど、中身はかなり雑。
それ、現実では成立しないことのほうが多い。
実データの複雑さ、偏り、スパイク、タイミングの揺らぎ、全部再現不能。
とくにJOINが関わると、クエリプランはデータ量や分布に応じて変化する。
たとえば初期はNested Loopで爆速だったJOINが、数百万件超えるとIndex Mergeになり、さらにデータが偏ると一気にフルスキャンに堕ちる。「その場では平気」でも、翌月には地獄が来る。
それに、負荷試験では「時間の経過による蓄積的劣化」は測れない。
たとえばバッチ処理や月次分析クエリ、広告配信ログなど、JOIN対象が少しずつ増えていく処理では、初期の負荷試験では一切異常が出ない。半年後、1年後に突然クエリ1本でサーバが沈む。
つまり、「リリース前に大丈夫だった」は、将来の保証にはならない。時間は最強の敵だ。
本当に経験積んでるエンジニアは、「負荷試験で詰めきれないものが必ずある」ことを理解して、そもそもそういう危うい構造を最初から作らないようにする。
JOINを避けるのは、「MySQLがいけてないから」じゃない。「JOINという構造自体が後から効いてくる爆弾だから」。
どんなDB使ってようが、JOINのスケール問題は必ず起きる。
逆。JOINを無警戒に使って設計して、死んだときに「こんなにデータ増えるとは思わなかった」とか言い出すやつが素人。
こっちは、死ぬとわかってる構造を未然に潰してるだけ。その結果が、辞書化・プリロード・キャッシュ・パーティション・非正規形の併用設計。
「JOINのせいにしてる」んじゃない、JOINの限界を理解してるから設計で回避してる。それだけ。
というわけで、負荷試験万能説、JOIN無罪論、MySQLディスり、全部現場経験不足と理屈のすり替えから来てる自己放尿である。
知識の断片で語るな。
JOINは便利。でも無敵じゃない。
あー、それ完全に自己放尿のマジックワード連打だな。「現実として〜」「破綻しません」「シンプルにしましょう」中身ゼロ。
こっちが挙げた定量的リスク(件数増加、I/O負荷、JOINの実行コスト)は無視して、「不安が大きいだけ」「思い込みで複雑にするな」って、論理じゃなくて態度の話にすり替えてる。話をそらすな。
その時点で設計ミスが確定する。ソフトウェア設計ってのは「今小さい」ことよりも、「将来の拡張性に備える」ことの方が重要なんだよ。
仮に今1万件しかなくても、1年後に50万件、3年後に1000万件になる可能性がゼロじゃない。「大きくならない保証」を誰が出してる?お前の感覚か?それただの希望的観測な。
JOINが破綻しない?それ、どこまでのスケールを見て言ってる?MySQLで1000万件×100万件のJOINやってみろよ。スワップ地獄で死ぬ。Hash Joinでインメモリに乗らなければディスクIOに落ちて、temp table爆発して終了だ。
「破綻しない」って言葉は、実際に巨大データをJOINさばいた経験があるやつだけが使っていい。少なくとも、現場で何度も「JOINがボトルネックで死ぬシステム」見てきた人間に対して、よくそんな軽く言えるな。
で、「シンプルに書くことが大事」ってのも、すり替え。簡単に書けることと正しく設計することは別。短く書けば正しいって話じゃない。
「JOINで1行で済むからシンプル」って、それは設計放棄の自己放尿でしかない。本当の「シンプル」ってのは必要十分な安全性・効率・拡張性を満たした構造だよ。
「不安が大きい」「思い込み」「シンプルに」全部自己放尿ワード。
こっちは不安を語ってるんじゃない。実測に基づいた将来への備えを語ってる。
そういうのを無視して設計するのはただの怠慢だし、シンプルでもなんでもない。
それ、先送りされた複雑さでしかない。後から破綻して、「なんであのときちゃんと設計しなかったんだろう」って後悔するのがオチだよ。
そうよね
リリース前に負荷試験で危ないクエリ洗い出しておけば安心してリリース迎えられるのに
あー、なるほどね。「JOINが難しくて避けてるだけなんじゃね?」ってわけか。
甘い。構造わかってない奴ほどそういう浅い自己放尿をしたがる。
まず前提を修正しろ。JOINの動きなんてとっくに分かってる。
SQLの実行プラン追って、Nested LoopかHash Joinか、インデックス使うのかフルスキャンになるのか、そのあたりの判断も含めて運用設計に組み込んでる。
こっちはわかった上で避けてんだよ。JOINを理解してないから避けてるんじゃない、JOINの実コストと限界を知ってるから回避してるの。
JOINってのは便利だけど代償がでかい。たとえば、数千万件のトラフィックログに対して、ユーザー属性をJOINするとしよう。
属性テーブルが1万件程度でも、JOIN時のI/OとCPU負荷は無視できない。結合条件次第ではインデックスも効かなくなる。クエリキャッシュも効かない、結合後にさらにGROUP BYやWHERE使えばオプティマイザの想定外の地雷も踏む。
こっちはそれを全部経験済み。痛みを知ってるから最適化してる。JOINの怖さを知らない素人が、理解できない設計を「逃げ」と断じるのは自己放尿だな。
それに「JOINがわかりづらい」なんて次元じゃない。JOINなんて構文としては簡単だろ?
問題はそれを巨大なスケールで運用したときのトラブルを想定してるかどうかだ。
JOINが原因で1時間かかるクエリになって死ぬとか、JOINが原因でMySQLのtemporary table溢れてswapに突っ込んでサーバ落ちるとか、JOINが原因でインデックスの設計ミスってテーブルスキャン発生して数億件走査するとか、そういうのを踏んでから語れ。
わかりやすくしとこうか?
JOINを盲信してるのは、「地雷原を地図だけ見て走り抜けようとしてる奴」と同じ。
JOINを避けてるのは、「地雷があるの知ってるから事前に地ならししてる奴」だよ。
「難しいから避けてる」んじゃない。
危険なの知ってるから、先回りして別ルートを構築してるだけだ。
何も知らないで「逃げてる」ってレッテル貼って自己放尿するの、やめとけ。
お前のJOIN観、浅すぎて逆に危ない。
https://survey.stackoverflow.co/2024/technology
https://survey.stackoverflow.co/2020#technology
| - | 2020 | - | - | - | 2024 |
| JS | 67.7 | - | - | - | 62.3 |
| Python | 44.1 | - | - | - | 51 |
| TS | 25.4 | - | - | - | 38.5 |
| Java | 40.2 | - | - | - | 30.3 |
| C# | 31.4 | - | - | - | 27.1 |
| C++ | 23.9 | - | - | - | 23 |
| C言語 | 21.8 | - | - | - | 20.3 |
| PHP | 26.2 | - | - | - | 18.2 |
| Go | 8.8 | - | - | - | 13.5 |
| Rust | 5.1 | - | - | - | 12.6 |
| kotlin | 7.8 | - | - | - | 9.4 |
| Lua | - | - | - | - | 6.2 |
| Dart | 4.0 | - | - | - | 6 |
| Ruby | 7.1 | - | - | - | 5.2 |
| Swift | 5.9 | - | - | - | 4.7 |
| Scala | 3.6 | - | - | - | 2.6 |
※HTML/CSS,SQL,Bash/Shell,とかそういうのは省いた
順調に伸びるPython人気、そしてTypescriptの伸びがすごいな
Javaって永遠に人気なのかと思ってたけどじわじわと人気が落ちている
PHPも長期的にみると厳しそう。
GoとRustが着実に人気を獲得。
Luaが地味に人気出てる。
| - | 2020 | - | - | - | 2024 |
| PostgraSQL | 36.1 | - | - | - | 48.7 |
| MySQL | 55.6 | - | - | - | 40.3 |
| SQLite | 31.2 | - | - | - | 33.1 |
| SQLServer | 33.0 | - | - | - | 25.3 |
| MongoDB | 26.4 | - | - | - | 24.8 |
| Redis | 18.3 | - | - | - | 20 |
| MariaDB | 16.8 | - | - | - | 17.2 |
| Elasticsearch | 13.8 | - | - | - | 12.5 |
| Oracle | 16.5 | - | - | - | 10.1 |
MySQL+MariaDBではまだMySQL系が多いが・・・
| - | 2020 | - | - | - | 2024 |
| Node.js | 51.4 | - | - | - | 40.8 |
| React | 35.9 | - | - | - | 39.5 |
| jQuery | 43.3 | - | - | - | 21.4 |
| Next.js | - | - | - | - | 17.9 |
| Express | 21.2 | - | - | - | 17.8 |
| Angular | 25.1 | - | - | - | 17.1 |
| ASP.NET CORE | 19.1 | - | - | - | 16.9 |
| Vue.js | 17.3 | - | - | - | 15.4 |
| ASP.NET | 21.9 | - | - | - | 12.9 |
| Flask | 14.2 | - | - | - | 12.9 |
| Spring | 16.4 | - | - | - | 12.7 |
| Django | 14.2 | - | - | - | 12 |
| FastAPI | - | - | - | - | 9.9 |
| Laravel | 11.1 | - | - | - | 7.9 |
| Svelte | - | - | - | - | 6.5 |
| Rails | 7.0 | - | - | - | 4.7 |
※フロントとバックエンドがごちゃごちゃなのなんでだろう。Node.jsってフレームワークじゃないだろ・・・
Next.jsの勢いがすごい。やはりWEBはTSでNext.jsの時代なのか
Pythonの人気は盤石だけど、DjangoとかFlaskは人気が落ちてる。FastAPIに食われたか?
LaravelとRailsはこのまま消えていく予感
バブル崩壊(1990年から1991年頃)以降に多くの企業が採用を絞った結果、大卒であってもまともな就職はできなかった、というのは誰もが知るところだ。
正社員の応募を何十、何百と出したけど全て不採用で落ちたとかそういうのもネットでは見た。私はそこそこの企業で5~10企業位だったが、ほぼほぼダメだったがあまり記憶が無い。そもそも就活で入社試験をやったり、SPI対策をやったり面接対策、論文対策なんかをやるのが非常にバカバカしいと思っていたくらいだから会社員には向いていなかったのだと思う。あ、NHKと中日新聞、公務員試験、あと出版社とかは受けたな。
結局、10月過ぎても決まらずに大学に来ていたエンジニア派遣会社に話を聞きに行きそのままトントン拍子で決まって就職した。ただ、給料は安かった。1997年当時で大卒18万とかだったと思う。会社の寮扱いのアパートが月6万、駐車場1万、これが天引きされて12万。所得税引かれて手取りは6-7万程度だったと思う。それでも食っていくのが無理だったからじゃがりこ1個で3日は食いつなぐ感じでした。そして年収にして250万くらいだったと思う。心も折れて休職もしそうになった。
大企業でも横並びで初任給20万円程度でこれがどこも同じだと感じていたが、実は福利厚生が全然違う。大企業だと引っ越し代、寮扱いアパート無料、電話代、ガス代、電気代無料といった具合だ。これだと月10万くらいは手元に残るお金が違う。そこで腐ってしまってはおしまいだ。
そこで次の手を考えた。当時(1997年頃)、IT業界ではWeb系システムが作られ始めておりWeb-AP-DBの3層アーキテクチャだった。一般的なアプリケーションサーバ(Apache, tomcat)+DB(MySQL他)で、大規模向けはMS SQL ServerやOracleだった。この頃、MS製品やOracle製品のベンダー資格がブームになり始める最初の頃だったと思う。そこで、Oracle Platinum資格を取得することにした。それには10個くらいの試験に合格しないといけないのだ。しかも、受験料が1科目15000円。すべて自腹を切っていく。そして適切な本も無いところで、2カ月余りで全て合格して取得。
まあ、やればできるんだよ。
そんなわけで、3年間の派遣はとっとと辞めて2000年に大手SIerへ転職しました。大企業はいいね。給与も待遇面も。でも、なぜかみんな暗いし有名大学卒で入社した割にはそれほど興味も無くて残念な感じ。スクラッチ系Webシステム開発やらERP(Oracle EBS)なんかを6年くらいやった。そしてだんだんつまんなくなってきた。心も折れて休職もした。ただ、IT系の資格で、Java、Linux、Solaris、などなどいろいろ取得してきたし総務省の情報処理試験も合格してきた。6年居た会社は不動産投資に失敗したり本業で失敗したりと経営危機のようだった。そこでさっさと去る。この時、年収500万くらいだったかな。
この頃、自分への先行投資を加速させるべく大前研一のアタッカーズビジネススクール、グロービスMBA講座、Bond-BBT-MBAプログラムを受講した。なんだかんだと数百万は使ったと思う。
そして、大手電機メーカーへ転職。年収700万くらいから始まって1000万いくて前くらいで辞めたんだが。12年間の中でSAP ERPをオンプレで新規導入して、アップグレードして、クラウドにしてとか、、まあ充実していたとは思う。一方で、システム運用要員がつまんなくてやめることに。
その後、独立した。最初は月60万くらいの仕事を請けてやっていたが、SAP導入支援となると跳ね上がる。既に独立8年目になるが、年収は5000万くらいになった。仕事も順調だ。100平米を超えるマンションも購入したし、スポーツカーも4台所有している。国内外はふらっといつでも旅行できる身分だ。とても幸せだ。
で、氷河期世代で社会が悪い、時代が悪い、と今でも言ってる人っているのか?努力が足りない!そう言われてきて育って、いま自分がある。心残りは結婚して子供を持つという余裕が無かったことか。あとは年々体力が落ちてきている事。別にそれは他人のせいにするつもりもない。自分がそれを選択しただけだから。そして、あなたは幸せですか?