ホームページ >バックエンド開発 >PHPチュートリアル >PHP が草の根言語とみなされているのはなぜですか? _PHP チュートリアル
以下のテキストには専門用語があまり含まれていないため、PHP に興味がある人なら誰でも読むことができます。
PHP の誕生以来、PHP は Web アプリケーションの大多数のプログラマーにサービスを提供し始めました。同時に、PHP は Web 開発に合わせたスクリプト言語として、常にシンプルさとオープンソースの考えを堅持してきました。これにより、PHP の迅速な開発が可能になり、Web 2.0 の出現と開発が精力的に促進されました。しかし、長い間、PHPer (PHP プログラマー) は草の根レベルのプログラマー、技術的な内容がほとんどなくレベルの低いプログラマーであると考えられてきました。これは特に国内に当てはまります。
テクニカルディレクターがそんなことを言っていたのを覚えています。彼はプログラマーに PHP の開発というタスクを割り当てましたが、そのプログラマーは実際にこう言いました。「私は Java の学生です。私に PHP を書くように頼んだとしたら、あなたは私を軽視しているのではありませんか?」。この出来事は私に深い印象を残し、大きな感動を与えました。これはほとんどのプログラマの意見を代表するものではありませんが、そう考える人は多いはずです。現時点で大規模な政府プロジェクトであれば、PHP は間違いなく検討対象に含まれないだろうと言う人もいます。
それでは、なぜ PHPer が草の根レベルとみなされているのでしょうか? それは非常にシンプルで誰でも学習できるため、難しくないからでしょうか?私も以前はそう思っていました。 PHP はすぐに始めることができ、ファイル、データ、リモート接続、ネットワーク プログラミングの処理に非常に便利です。また、PHP の学習コストは非常に低いため、簡単に使用できると公式も述べています。この考えは一般的でもあり、ほとんどの PHPer 自身さえもそう考えています。
ここまで言うと、なぜ私がこのような言葉を書いたのか、皆さんも考えられると思います。なぜなら、1 年以上 PHP 推進の仕事に携わってきたことで、PHP を使用している多くの企業の一般的な状況を理解できるようになったからです。こうしたプロセスの中で、私は徐々に根本原因に気づきました。ここで言う根本的な理由は私の個人的な意見ですが、これが事実だと思います。
それでは、なぜ PHPer が草の根レベルとみなされているのでしょうか? その根本的な理由は、PHPer が行うこと (コードを介して実装される) のほとんどは、PHP に精通している人なら誰でも知っていることです。もちろん、MVC 構造で書かれた特定のフレームワークの機能について話す PHP も登場します。ただし、これらは依然としてプレゼンテーション層です。したがって、プレゼンテーション層のみを扱うプログラマーは草の根とみなされます。実際、これは真実です。なぜなら、この場合、PHP で大規模なアプリケーションを構築するのは非常に困難だからです。
それが理由です、いいえ。 PHPer が常にプレゼンテーション層を担当するのはなぜですか?答えは、基本的なデータ処理 (Web アプリケーションはデータの保存と検索です) には通常触れないからです。さて、この時点で、これはデータベースではないかと思った人もいるかもしれません。そう、データベースです。 PHPer を草の根レベルに留めている主な原因はデータベースです。なぜ?
現在一般的な Web アーキテクチャでは、フロントエンドが負荷分散システム、中間が Web サーバー、バックがデータベース サーバーであるためです。したがって、PHPer のほとんどは Web サーバー レベルで動作します。データベースがデータを非常にうまく整理してくれるからです。そのため、PHP にはアルゴリズムがそれほど多くなく、パフォーマンスに影響することは言うまでもなく、人々は無意識のうちにアルゴリズムが必要ないと感じています。
この場合、PHPer はデータベースユーザーとなり、常にデータベースを操作します。プログラムをやるというよりは。最も単純な PHP スクリプトの 1 つは、データベースに接続してデータを取り出し、コマンドを使用してそれをブラウザーに出力することです。プロセス全体に必要なコードは 10 行以内です。シンプルすぎるような気がします。技術的な内容はありません。なぜかというと、データ処理部分はデータベースによって完了しているからです。特にMySQLの使用。 MySQL は無料なので、ほとんどのプログラマーが自由に使用できます。また、MySQL は十分に高速なので、PHP アプリケーションを作成するのは非常に簡単です。これはあなたに銃を与えるのと同じであり、武道を学ぶ必要はないと感じます。もちろん、銃が武道ほど優れていないと言っているわけではありません。むしろ、銃の出現により、子供たちは簡単かつ便利に人を殺すことができます。
なぜデータベースなのかについて詳しく話しましょう。ここで例を挙げます。私は北京の非常に有名な Web サイトに行きました。そのとき、比較的上級の PHP プログラマーがシステム アーキテクチャについて話していました。プログラマーが全員にデータ構造におけるアルゴリズムの質問をしたとき、聴衆の誰も (私を含めて) それに答えることができなかったことを覚えています。それからプログラマは、非常に基本的なデータ構造を全員に伝え始めました。早速、大学で学んだデータ構造の授業を思い出してみましょう。これらの基本的なデータの並べ替え、検索、転送の問題は、他の高級言語 (C など) では非常に一般的です。しかし、PHPではそうではありません。 PHPchina.com フォーラムには、PHP データ構造とアルゴリズムと呼ばれるセクションもあります。このセクションにも投稿はほとんどありません。
そう言えば、分かりますか?ほとんどの PHPer は、MySQL を便利に使用することで、ほとんどの開発タスクをデータ構造やアルゴリズムに触れることなく完了できます。そのため、上記の質問に答えることができるのは 1 人の PHP プログラマーだけです。データ構造の問題が発生し、C などの言語に切り替えられると、状況は大きく異なる可能性があります。 PHP が草の根のように見えるのは、PHPer の草の根です。
よく考えてみると、インターネット上で最も議論されている問題には 2 つの側面があります。 1つはPHPクラスの利用(処理手順のカプセル化)、もう1つは開発フレームワークの問題です。しかし、注意深く分析すると、PHP にはこれらのいわゆる比較的複雑な概念におけるデータ処理が存在しないことがわかります。なんと、データベースがあるのです。これは、Adodb または PHP5 PDO を使用して実行できます。本当に終わったのですか?いいえ、これらはデータベースに接続しているだけであり、データ処理はありません。したがって、PHPer には何ももたらすものはないようです。
特定のコードの問題、無段階分類について話しましょう。この概念は誰もがよく知っていると思います。私はそれが 2 つの方法で行われるのを見てきました。 1 つ目は本格的な PHPer 処理方法で、これも現在比較的人気があります。データベースを使用して処理するだけです。フィールドの数は非常に少なく、親クラスのフィールドを追加して判断するだけです。そしてこの方法は非常に実践的です。効率も高いです。ただし、これはデータ処理の範囲ではなく、データベース検索の範囲です。
2 つ目は、C プログラマーが PHP を使用して作成したもので、データベースからすべての分類情報を取り出し、データ構造アルゴリズムを使用して整理および配布し、出力しました。
ここではこれら 2 つの方法の効率を比較しません。人それぞれの考えがあると思います。しかし、これら 2 つのアプローチの本質的な違いである問題を明確にしたいと思います。 PHPer はデータベースを利用して処理を行うことが多く、非常に賢い処理方法を持っており、非常に効率的です。この方法はデータベースクエリです。 2 番目の方法はより特徴的です。彼は、データベースはデータが保存される場所であり、具体的な論理処理は独自のロジックに依存すると考えています。
したがって、結論としては、2 番目の方法のユーザーは、データのロジックがユーザーによって整理されているため、より強く感じられるということになります。そして、PHPer が行うことはデータベースにクエリを実行することに他ならないと感じています。そこで彼は、PHPer は草の根であり、データベースの操作方法とページの配置方法 (賢い種類) しか知らないと考えています。
そう言えば、誰もが PHP を使った普段の開発経験を思い出したことがあるかと思いますが、実際にデータベースを操作していることに気づきましたか?
それでは、この問題について話し合いましょう。データベースが悪いのでしょうか?データ処理にデータベースを使用しても問題がないのはなぜですか?私が言いたいのは、データベースに何か問題があり、非常に問題があるということです。もちろん、ここでデータベースを使用できないと言っているわけではありませんし、データベースのパフォーマンスを軽視しているわけでもありません。むしろ、データベースが果たす役割を十分に認識していないのです。
私のアイデアは、あるウェブサイトのテクニカル ディレクターから、なぜウェブサイトが遅いのか、何をすべきなのかを尋ねられたことがきっかけでした。そのとき、MSN の Zend 本社のエンジニアがたまたまオンラインだったので、「PHP の応答が遅い場合はどうすればよいですか?」と尋ねました。その時、彼は私に、それはデータベースの問題だと直接言いました。データベースが最適化されておらず、適切に設計されていない可能性があります。したがって、私たちはデータベース設計に関与することができず、技術責任者には明確な回答をしませんでした。そこで、データベースの最適化に関する一般的な提案をいくつか行いました。このようなことが何度も起こったので、なぜ Zend 本社のエンジニアが毎回、これはデータベースの問題だと私に言うのかと疑問に思いました。この問題は PHP レベルから解決できないでしょうか。答えはいいえだ。現在、PHP は非常に高速に実行されるため、Zend のパフォーマンス分析によると、ユーザーのクリックによる PHP の実行時間は 10% 未満であることがわかります。では、PHP は何をしているのでしょうか。待っています。データベースのクエリ結果を待っています。この点は、現在の PHP 製品、つまりキャッシュと Web ページの静的化では大幅に改善されています。
キャッシュは誰にとっても馴染みのないものかもしれませんが、Web ページの静的化は PHP 製品のユーザーにとっても非常に明確です。速い、検索が簡単など、メリットは明らかです。冗談めかして言えば、Web サイトのトップページで静的な Web ページを実現するには、十分な容量のハード ドライブのみが必要です。 J キャッシュに関しては、より複雑で、ほとんどの PHPer にとって頭痛の種でもあります。 C を使用して実装する人もいます。キャッシュにおけるデータの有効期限検証、検索、抽出、更新などの処理がより困難になるためです。もちろん、キャッシュの問題に対処するためにデータベースを使用する人もいます。
したがって、トラフィックが急増すると、PHP で構成された Web サイトで発生する多くの問題は、データベースが原因で発生します。データベースの同期の問題は大した問題ではありません。重要なのは、データベースの応答速度が指数関数的に低下するということです。私は 10 月 23 日の LAMP カンファレンス中に、MySQL の副社長にこの質問をしました。その時、彼は私に完璧な答えをくれませんでした (私はそれを予想していました)。なぜなら、それが妖精のデータベースでない限り、データベースには常にボトルネックが存在するからです (笑)。
ここで余談ですが、LAMP カンファレンス中に Yahoo の技術幹部と話をしていたとき、Yahoo が MySQL か Oracle を選択する際に何を考慮したか尋ねたところ、彼の答えには非常に驚きました。彼は、パフォーマンスが要件を満たしているので、ほとんどの場合 MySQL を使用するだろうと言いました。しかし、どのような場合に Oracle を選択するのでしょうか? それは、有料ユーザーのデータを保存する必要がある場合です。なぜ、Oracle は MySQL よりも安定しているのかと尋ねました。これについては特別な配慮はしていないと述べた。重要なのは、Oracle を使用すると、問題が発生したときに担当者を見つけることができ、Oracle が責任を持って対応してくれるということですが、MySQL を使用した場合、誰に相談すればよいでしょうか?
。したがって、データベースに対する私たちの見方は修正されるべきです。つまり、データベースは全能ではないということです。能力がある場合は、独自のデータベースを開発してください。 Googleもそうだと聞きました。
それでは、データベースについてどう考えますか?私の個人的な理解では、データベースは開発コストを削減するための単なる手段です。データベースを使用した後は、データの保存、特に並べ替えや検索について考慮する必要がないからです。しかし、これはどのような問題を引き起こすのでしょうか?ビジネスが拡大すると、データベースがボトルネックになります。現時点ではその問題は非常に難しいものとなるだろう。これは基礎となるデータ処理であるためです。たった一度の動作が体全体に影響を及ぼします。
つまり、データベースはデータのバックアップマシンであるというのが正しい指摘だと思います。どう理解するかというと、データストレージの有効性を確保するだけで十分です。本来、これがデータベースの中核となる機能なのですが、ソートなどの便利な機能のせいで、データベースに処理を任せすぎてしまっています。ユーザーが PHP をクリックすると、多くのタスクがデータベースに渡され、結果がソートされてユーザーに提供されます。これはデータベースにとって不公平です。だからこそ、誰もがデータベースのパフォーマンスについて不満を言い始めたのです。
この観点に応えて、別の例を挙げましょう。私はある大手インターネット企業を訪問しました (基本的に中国でインターネットにアクセスしたことのある人なら誰でもこのことを知っています)。しかし、私は彼らが他のビジネスで PHP をどのように使用しているかを学びました。 .データベース。彼らはデータベースの外に 2 つ目のデータベースがあることを誇らしげに私に紹介しました (ここでは 2 つ目のデータベースと名付けました)。なぜ第 2 のデータベースと呼ばれるのでしょうか? それはキャッシング システムであることがわかります。では、開発エンジニアはどのようにしてこのキャッシュ システムからデータを取得するのでしょうか?テクニカル ディレクターは、自社のキャッシング システムには SQL クエリ ステートメントがあると誇らしげに言いました。その時は驚きましたが、これは本当に必要だと思いました。キャッシュ システムが特定のレベルに達すると、SQL クエリ ステートメントを作成してキャッシュ システムにデータを分析、処理させてキャッシュからデータを取得するのが非常に複雑になるためです。そして、代わりに、PHP が使用されている場合でも、PHP はキャッシュ システムからデータを読み取るように求められると教えてくれました。
したがって、この問題にうまく対処できれば、データをデータベースに保存すれば、データベースはバックアップとしてのみ機能します。次に、独自の中間層を使用して分析データを処理すると、90% 以上のユーザーがデータベースにアクセスしなくなります。これは接続プールに似ているのではないかと言う人もいるでしょう。はい、データベースのボトルネックは解決できないため、Web サーバーとデータベースの間にバッファリング用の中間層を追加することしかできません。
もしかしたら、あなたはこう言うかもしれません、「チク、私たちはこのことをずっと前から知っていました。」さて、私がここで言いたいのは、それが引き起こした 2 つの考えです:
まず、一部の言語にはすでに接続プール テクノロジがあり、プログラマは接続プールを簡単に使用して大規模なアプリケーションを構築できます。それでは、PHPer がデータベースのみを使用すると考えている場合、接続プールのみを使用すると言えるのでしょうか?接続プーリングとデータベースの概念的な違いは何ですか?
第二に、PHPer が独自のキャッシュ システムを構築し始めたとき、PHPer はデータベースのみを使用するというレベルを突破しましたか?なぜなら、彼はデータロジックの処理に携わっているからです。それで彼はまだ草の根の人ですか?
最後に、独立して考える方法を知っている PHP パーは、すべてをデータベースに任せる草の根の人々ではありません。