2012-03-08 25 views
2

iOSアプリケーションとの通信にバックエンドサーバーとAPI(PHP)を設定する必要があるクライアントからプロジェクトを受けました。私はアプリについてあまり詳しく説明することはできませんが、ほとんどの場合、それは社会的に基づいているため、リクエストの受信時にデータベースを常に更新する必要があります。このデータベースはどのように管理すればよいですか?

現在、データベースは3つのテーブルで構成されています(コメントはすぐに4番目にあります)。ユーザー、開催地、および待ち行列。現時点では、私がリクエストするたびに、関連するデータをデータベースから取得するだけですが、データベースの「スケーラビリティ」を向上させる方法や、使用方法を実装する必要があるのか​​どうか疑問に思っています。 )memcachdやRedisなどを改善するためにアプリがソーシャルであり、潜在的に大きなユーザーベースを持つ可能性があるので、これは必要ですか?そして、毎秒何百ものリクエストに対して良好なパフォーマンスの良いデータベースを使用していますか、別のデータベースに切り替える必要がありますか?

ありがとうございました。

P.私の構造を自由に選ぶことができます。誰でも興味を持ったポストに入れてください。

CREATE TABLE `Queues` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `userID` int(11) NOT NULL, 
    `Creation_Date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `Last_Updated` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `venueID` int(11) NOT NULL, 
    `Wait_Time` int(10) NOT NULL, 
    `Line_Length` int(10) NOT NULL, 
    `Note` varchar(250) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ; 


CREATE TABLE `Users` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `First_Name` text NOT NULL, 
    `Last_Name` text NOT NULL, 
    `Username` text NOT NULL, 
    `Password` text NOT NULL, 
    `Email` text NOT NULL, 
    `Signup_Method` text NOT NULL, 
    `Signup_Date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `Number_of_Lines` int(11) NOT NULL, 
    `Number_of_Venues` int(11) NOT NULL, 
    `Last_Updated` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=27 ; 


CREATE TABLE `Venues` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `userID` int(11) NOT NULL, 
    `foursquareID` int(11) NOT NULL, 
    `Name` text NOT NULL, 
    `Latitude` text NOT NULL, 
    `Longitude` text NOT NULL, 
    `Address_Line1` text NOT NULL, 
    `Address_Line2` text NOT NULL, 
    `Post_Code` text NOT NULL, 
    `Country` text NOT NULL, 
    `Description` text NOT NULL, 
    `Created_At` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `Last_Updated` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; 

答えて

2

必要が生じるまで、キャッシュ方法について心配する必要はありません。当面は、データベースが適切に正規化されていることを確認してください。サイトがスムーズに動作し、人気を得始めると、memcachedのフックは比較的簡単な作業になります。

キューがキューの開催地を所有するユーザーと異なるユーザーに属している可能性があります(Queues.userIDVenues.userIDQueues.venueID)。これがあなたが望むものでなければ、Queues.userIDを削除したいと思うでしょう。ユーザーの情報は待ち行列の会場を確認することで得ることができます。 Users.Number_of_Venuesは、特定のuserIDVenuesの数のカウントであれば、その情報を迅速COUNT(*)することによって得ることができるようにそれを保存する理由はありませんよう

また、それを削除します。それを残すことは、正規化の欠如を意味するでしょう。

スキーマが設定されたら、properly indexを覚えておいてください。これは、あなたの質問をスピードアップするのに命を救うでしょう。

関連する問題