1

理論的な質問があります。本番環境に対応したソリューションを作成するか、さまざまなモジュール/プラグインを開発するために、独自のCMS /アプリフレームワークを設計しています(さまざまなレベルの多くのPHPプログラマーが以前に行っていたように...そして常にそうします)。後で使用します。

とにかく、私はアプリ全体からSQL接続を収集し、それらを1か所で実行することを考えています。

index.php:
<?php
  include ('latestposts.php');
  include ('sidebar.php');
?>

latestposts.php:
<?php
  function gather_data ($arg){ $sql= ""; }
  function draw ($data) {...}
?>

sidebar.php:
<?php
  function gather_data ($arg){ $sql= ""; }
  function draw ($data) {...}
?>

さて、モジュールシステムアプリケーション全体はまだ形作られていませんが、そのアイデアはすでに私の脳のどこかに浮かんでいます。ただし、最初にすべての関数をロードしgather_data、次にsqlを実行してからdraw関数を実行できるかどうか、そして結果を再利用できるかどうかを考えています。

たとえば、$sqlisSELECT * FROM POSTS LIMIT 10$sql2isの場合、 SELECT * FROM POSTS LIMIT 5PHPをプログラムして、「ああ、同じSQLです。一度だけ呼び出して、最初の5行を再利用します」と表示することはできますか?

または、この動作を一部のDRMに追加することは可能ですか?

ただし、タグが示すように、これはまだ進行中のアイデアにすぎません。それが簡単に達成できることがわかったら、私はどのようにもっと質問を投稿します:)

それで、基本的に:それは可能ですか、それは意味がありますか?両方が「はい」の場合、...どのようにアイデアがありますか?

4

2 に答える 2

2

誤解しないでください、それはもっともらしい考えのように聞こえます、そしてあなたはおそらくそれを実行させることができます。しかし、それが本当に有益になるのだろうかと思います。それはシステムをより速くしますか?あなたにもっとコントロールを与えますか?開発を容易にしますか?

よく実践されているMVCスタイルのコーディング標準を使用してシステムを使用(または構築)し、優れたDB構造を構築し、Apacheを微調整します(またはLighttpdなどを使用します)。コードをオープンソースにすることを決定した場合、コードがより広く受け入れられるようになります。また、コードを手に入れる必要がある場合は、別の開発者がすぐに介入してキーボードを手に取ることができます。

また、MySQLのクエリキャッシングを確認してください。クエリの例に関して、クエリ結果サーバー側をキャッシュすることで、同様の(1対1ではありませんが)メリットが得られます。さらに良いことに、サーバーメモリに保存されるため、PHP / MySQLのオーバーヘッドが削減され、コーディングする必要がありません。

それはさておき、私はそれが可能だと思います。=)

于 2010-02-02T20:43:03.070 に答える
1

一般的に、このようなキャッシュシステムは大幅な時間の節約になりますが、メモリと複雑さが犠牲になります。保持したい結果が多ければ多いほど、より多くのメモリが必要になります。また、特に大きな結果セットで、結果が再び使用されるという保証はありません。

次に、キャッシュしてはならない、またはキャッシュ内にある場合でも再度実行する必要がある特定のクエリがあります。ほとんどの場合、効果的にキャッシュできるのはSELECTクエリとSHOWクエリのみですが、基になるデータを変更するときにそれらを無効にすることを心配する必要があります。同じページビューでも、場合によっては自分のキャッシュシステムを回避していることに気付くかもしれません。

第三に、この種の問題はすでに数回解決されています。まず、MySQLクエリキャッシュをオンにすることを検討してください。ほとんどの場合、コードを変更しなくても、処理速度が少し向上します。ただし、エントリの無効化には少し積極的であるため、より高いレベルである程度のパフォーマンスを得ることができます。

別のレベルが必要な場合は、memcachedを検討してください。エントリを手動で保存して無効にする必要がありますが、ページビュー全体に結果を保存でき(パフォーマンス上の利点が実際にわかります)、メモリが不足する前に未使用のエントリを期限切れにします。

于 2010-02-02T21:04:24.537 に答える