PHPer は草の根ですか?
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 データ構造とアルゴリズムと呼ばれるセクションもあります。このセクションにも投稿はほとんどありません。
よく考えてみると、インターネット上で最も議論されている問題が 2 つあります。 1つはPHPクラスの利用(処理のカプセル化)、もう1つは開発フレームワークの問題です。しかし、注意深く分析すると、PHP にはこれらのいわゆる比較的複雑な概念におけるデータ処理が存在しないことがわかります。なんと、データベースがあるのです。 Adodb または PHP5 PDO を使用して実行できます。本当に終わったのですか?いいえ、これらはデータベースに接続しているだけであり、データ処理はありません。したがって、PHPer には何ももたらすものはないようです。
コーディングに関する具体的な問題、無段階分類について話しましょう。この概念は誰もがよく知っていると思います。私はそれが 2 つの方法で行われるのを見てきました。 1 つ目は、現在普及している本格的な PHPer の処理方法です。データベースを使用して処理するだけです。フィールドの数は非常に少なく、親クラスのフィールドを追加して判断するだけです。そしてこの方法は非常に実践的です。効率も高い!ただし、これはデータ処理の範囲ではなく、データベース検索です。
2 番目のものは、C プログラマーが PHP を使用して作成したもので、データベースからすべての分類情報を取り出し、データ構造アルゴリズムを使用して整理および配布し、出力しました。
ここではこれら 2 つの方法の効率を比較しません。人それぞれの考えがあると思います。しかし、これら 2 つのアプローチの本質的な違いである問題を明確にしたいと思います。PHPer はデータベースを使って処理するのが常ですが、非常に賢い処理方法を持っており、非常に効率的です。この方法はデータベースクエリです。 2 番目の方法はより特徴的です。彼は、データベースはデータが保存される場所であり、具体的な論理処理は独自のロジックに依存すると考えています。
したがって、結論としては、2 番目の方法を使用したユーザーは、データのロジックを整理しているため、より強く感じられるということになります。そして、PHPer のアプローチはデータベースにクエリを実行することに他ならないと思います。そのため、彼は PHPer は草の根であり、データベースの操作方法とページの配置方法 (賢い種類) しか知らないと考えています。
そういえば、皆さんは普段 PHP を使った開発経験を思い出したことがあるかと思いますが、実際にデータベースを操作していることに気づきましたか?
それではこの問題について話し合いましょう。データベースが悪いのでしょうか?データ処理にデータベースを使用しても問題がないのはなぜですか?私が言いたいのは、データベースに何か問題があり、大きな問題があるということです。もちろん、ここでデータベースを使用できないと言っているわけではありませんし、データベースのパフォーマンスを軽視しているわけでもありません。むしろ、データベースが果たす役割を十分に認識していないのです。
私のアイデアはこの出来事から生まれました。あるとき、ある Web サイトのテクニカル ディレクターが、なぜ Web サイトがこんなに遅いのか、どうすればよいのか尋ねました。そのとき、MSN の Zend 本社のエンジニアがたまたまオンラインだったので、「PHP の応答が遅い場合はどうすればよいですか?」と尋ねました。その時、彼はデータベースに問題があると私に直接言いました。データベースが最適化されておらず、適切に設計されていない可能性があります。したがって、私たちはデータベース設計に関与することができず、技術責任者には明確な回答をしませんでした。そこで、データベースの最適化に関する一般的な提案をいくつか行いました。このようなことが何度も起こったので、なぜ Zend 本社のエンジニアが毎回、これはデータベースの問題だと私に言うのかと疑問に思いました。この問題は PHP レベルから解決できないでしょうか。答えはノーです!現在、PHP は非常に高速に実行されるため、Zend のパフォーマンス分析によると、ユーザーのクリックによる PHP の実行時間は 10% 未満であることがわかります。では、PHP は何をしているのでしょうか。待っています。データベースのクエリ結果を待っています。この点は、現在の PHP 製品、つまりキャッシュと 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 はデータベースのみを使用するというレベルを突破しましたか?なぜなら、彼はデータロジックの処理に携わっているからです。それで彼はまだ草の根の人ですか?
最後に、新世代の PHPer は草の根ですか?