ホームページ >バックエンド開発 >PHPチュートリアル >php が草の根言語とみなされているのはなぜですか?

php が草の根言語とみなされているのはなぜですか?

伊谢尔伦
伊谢尔伦オリジナル
2016-11-25 11:49:571068ブラウズ

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 を草の根レベルに留めている主な原因はデータベースです。なぜ?

PHPerはMySQLに依存しすぎています

なぜなら、現在普及しているWebアーキテクチャでは、フロントエンドが負荷分散システム、真ん中がWebサーバー、バックがデータベースサーバーになっているからです。したがって、PHPer のほとんどは Web サーバー レベルで動作します。データベースがデータを非常にうまく整理してくれるからです。そのため、PHP にはアルゴリズムがそれほど多くなく、パフォーマンスに影響することは言うまでもなく、人々は無意識のうちにアルゴリズムが必要ないと感じています。

この場合、PHPerはデータベースユーザーとなり、常にデータベースを操作することになります。プログラムをやるというよりは。最も単純な PHP スクリプトの 1 つは、データベースに接続してデータを取り出し、コマンドを使用してそれをブラウザーに出力することです。プロセス全体に必要なコードは 10 行以内です。シンプルすぎるような気がします。技術的な内容はありません。なぜかというと、データ処理部分はデータベースによって完了しているからです。特にMySQLの使用。 MySQL は無料なので、ほとんどのプログラマーが自由に使用できます。また、MySQL は十分に高速なので、PHP アプリケーションを作成するのは非常に簡単です。これはあなたに銃を与えるのと同じであり、武道を学ぶ必要はないと感じます。もちろん、銃が武道ほど優れていないと言っているわけではありません。むしろ、銃の出現により、子供たちは簡単かつ便利に人を殺すことができます。

なぜデータベースなのかについて詳しく話しましょう。ここで例を挙げます。私は北京の非常に有名な Web サイトに行きました。そのとき、比較的上級の PHP プログラマーがシステム アーキテクチャについて話していました。プログラマーが全員にデータ構造におけるアルゴリズムの質問をしたとき、聴衆の誰も (私を含めて) それに答えることができなかったことを覚えています。それからプログラマは、非常に基本的なデータ構造を全員に伝え始めました。早速、大学で学んだデータ構造の授業を思い出してみましょう。これらの基本的なデータの並べ替え、検索、転送の問題は、他の高級言語 (C など) では非常に一般的です。しかし、PHPではそうではありません。 PHPchina.com フォーラムには、PHP データ構造とアルゴリズムと呼ばれるセクションもあります。このセクションにも投稿はほとんどありません。

ここまで言えば、皆さん分かりますよね?ほとんどの PHPer はプレゼンテーション層の事柄のみを扱います。MySQL を便利に使用することで、PHPer はデータ構造やアルゴリズムに一切触れずにほとんどの開発タスクを完了できます。そのため、上記のことを備えているのは 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での開発経験をよく思い出していると思いますが、皆さんは確かにデータベースを操作していることに気づきましたか?

それではこの問題について議論しましょう。データベースが悪いのか?データ処理にデータベースを使用しても問題がないのはなぜですか?私が言いたいのは、データベースに何か問題があり、非常に問題があるということです。もちろん、ここでデータベースを使用できないと言っているわけではありませんし、データベースのパフォーマンスを軽視しているわけでもありません。むしろ、データベースが果たす役割を十分に認識していないのです。

私のアイデアはそのようなことから生まれました。あるとき、ある Web サイトのテクニカル ディレクターが、なぜ Web サイトがこんなに遅いのか、どうすればよいのか尋ねました。そのとき、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 をクリックすると、多くのタスクがデータベースに渡され、結果がソートされてユーザーに提供されます。これはデータベースにとって不公平です。だからこそ、誰もがデータベースのパフォーマンスについて不満を言い始めたのです。

この観点に関して、私はある大手インターネット企業を訪問しました(基本的に中国でインターネットにアクセスしたことのある人なら誰でもそれを知っています)が、私は彼らの他のビジネスがどのように機能しているかを学びました。データベース。彼らはデータベースの外に 2 つ目のデータベースがあることを誇らしげに私に紹介しました (ここでは 2 つ目のデータベースと名付けました)。なぜ第 2 のデータベースと呼ばれるのでしょうか? それはキャッシング システムであることがわかります。では、開発エンジニアはどのようにしてこのキャッシュ システムからデータを取得するのでしょうか?テクニカル ディレクターは、自社のキャッシング システムには SQL クエリ ステートメントがあると誇らしげに言いました。その時は驚きましたが、これは本当に必要だと思いました。キャッシュ システムが特定のレベルに達すると、SQL クエリ ステートメントを作成してキャッシュ システムにデータを分析、処理させてキャッシュからデータを取得するのが非常に複雑になるためです。そして、代わりに、PHP が使用されている場合でも、PHP はキャッシュ システムからデータを読み取るように求められると教えてくれました。

したがって、この問題に対処できる場合は、データをデータベースに保存すると、データベースはバックアップとしてのみ機能します。次に、独自の中間層を使用して分析データを処理すると、90% 以上のユーザーがデータベースにアクセスしなくなります。これは接続プールに似ているのではないかと言う人もいるでしょう。はい、データベースのボトルネックは解決できないため、Web サーバーとデータベースの間にバッファリングを行う中間層を追加するしかありません。

たぶんみんなはこう言うでしょう、「ちくしょう、私たちはこれをずっと前から知っていました。」さて、私がここで言いたいのは、それが引き起こした 2 つの考えです:

まず、一部の言語にはすでに接続プール テクノロジがあり、プログラマは接続プールを簡単に使用して大規模なアプリケーションを構築できます。それでは、PHPer がデータベースのみを使用すると考えている場合、接続プールのみを使用すると言えるのでしょうか?接続プーリングとデータベースの概念的な違いは何ですか?

第二に、PHPer が独自のキャッシュ システムを構築し始めたとき、PHPer はデータベースのみを使用するというレベルを突破しましたか?なぜなら、彼はデータロジックの処理に携わっているからです。それで彼はまだ草の根の人ですか?

最後に、独立して考える方法を知っている PHP パーは、すべてをデータベースに任せる草の根の人々ではありません。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。