3

クエリ文字列を使用してさまざまな情報を検索する基本的な Web アプリを php と MySQL で作成しました。例えば:xxxxxxx.com/?profile=1245

非常に基本的な、初めての開発者向けの Web アプリです。

それぞれ独自のデータ セットを持つさまざまなアカウントを作成したいと考えています。サブドメインを使用してこれらのアカウントを区別したいと考えています。例えば:username.xxxxxxxx.com?profile=4527

すべてのサブドメインをメイン ドメインに転送するように Apache 構成にキャッチオールを設定してから、次のように php を使用してそのサブドメインを引き出すことができます。

<?php list( $username ) = explode( ".", $_SERVER[ "HTTP_HOST" ] ); ?>

さて、ここに私の質問があります:

すべてのページで実行する必要があるすべてのクエリに対して文字列ベースの検索を実行するのは、遅くて非効率的であると私には思えます (私はこれらすべてにかなり慣れていません)。たとえば、見上げなければならないSELECT * WHERE username = sampleuser AND profile = 2745

しかし、それは本当ですか?最も効率的な方法は何ですか?サブドメインを使用する Web アプリは通常、このようなことをどのように処理するのでしょうか?

よろしくお願いします。

4

2 に答える 2

3

サブドメインの使用はあまり効率的ではありません。SEOを見てみると。同じコンテンツを持つ多くのドメインとサイトがあります。

あなたの場合は書き直したい

www.xxxxx.com/username

次に、ユーザー名をスクリプトに書き直すことができます。問題は、ユーザーごとに新しいサブドメインを作成するときに問題になる可能性があることです。ユーザーが DNS 要求をキャッシュしていて、サイトへのアクセスに時間がかかっている可能性があります。

2 つ目は、データベースへのクエリをできるだけ少なくすることです。ユーザー名または ID をセッションに保存します。

$_SESSION['username'] = 'username';

次に、データベースから情報を取得するためのクエリを作成できます。

編集:より多くのパフォーマンスが必要な場合は、MongoDBを確認するか、 Memcacheを使用して保存/キャッシュする必要があります。

于 2012-12-20T00:12:55.493 に答える
0

「サブドメインを使用するWebアプリは、通常、この種の処理をどのように処理しますか?」

通常、各サブドメインは、書き換えモジュールなどを使用してWebエンジン(apache / IIS)で、特定のIPアドレスまたは特定のルートにマップされます。したがって、blog。*サブドメインはWordPressアプリのルートを指している可能性があります。

あなたの場合、ユーザーごとに異なるページのセットがない限り、それは当てはまらないように思えます。つまり、すべてに「アカウントの詳細」ページがあり、データのみが異なる場合、サブドメインが機能するのは、クエリまたは生成したURLのみです。

あなたの場合、概念的に動的なルートがあります。通常は、テーブルをクエリして、提供するコンテンツを決定します。あなたの場合、それは単なるデータほど多くのコンテンツではありません。ルートは、ルックアップ用に適切に編成されたデータ構造を使用してメモリにグローバルにキャッシュされる場合があります。この場合、ユーザーテーブルの主キーを返すユーザー名を使用してルックアップします。次に、ユーザーのテーブルをクエリせずに、外部キーを介してそのユーザーを参照するデータのフィルター基準を取得します。したがって、「いいね」ページに移動すると、「Select * From Likes Where UserKey =$userKeyFromLookup」を実行できます。O(1)ルックアップを可能にするルックアップ用のメモリ内データ構造を選択することをお勧めします。つまり、一定時間のルックアップ。

すべてのページで実行する必要のあるすべてのクエリに対して文字列ベースの検索を実行すると、速度が遅く非効率になるように思われます(私はこれらすべてにかなり慣れていません)。たとえば、SELECT * WHERE username = sampleuser AND profile=2745を検索する必要があります

プロファイルIDは各ユーザーに固有ですか?その場合、クエリにユーザー名は必要ありません。プロファイルIDだけで、一意の応答が得られます。誰かがユーザー名にアクセスした場合。プロファイルIDがない場合、最初に行うことは、profileIDを取得してから同じページにリダイレクトしますが、URLにそのパラメーターを指定して、他のすべてのナビゲーションがそのprofileIDのコンテキストで実行されるようにします。

Stonyには同意しますが、動的なサブドメインを持つクォークが見つかると思います。代わりに、URLにユーザー名を入れます。

于 2012-12-20T00:26:33.550 に答える