1

StackOverFlowと同様に上下の投票オプションがあるプロジェクトに取り組んでいます。私はDB設計の経験があまりないので、次の問題に直面しました。

まず、投票用のテーブル構造を次に示します。

  1. voteId ----- AUTO_INCREMENT withPRIMARYKEY。
  2. mediaId ----ユーザーが賛成/反対票を投じるメディア。
  3. userId -----投票したユーザー。
  4. 投票モード---1は賛成票、0は反対票。これは整数フィールドです。

この場合、100人のユーザーと100人のメディアがある場合、このテーブルには合計100x100のレコードがあります。

ここで問題が発生するのは、DBが大量のレコードを処理していて、投票ボタンの反応が非常に遅いことです。これは私のクライアントを不幸にし、私を困らせています。

この巨大なテーブルを避けるためのより良いモデルを誰かが私に提案できますか?

私はjQuery.ajaxを使用して投票をサーバーに投稿しています。また、このプロジェクトはPHPとZendFramework1.11に基づいています。そのため、UPアイコンをクリックすると、応答に時間がかかります。Mozillaは、特定の時間にクラッシュしていました。大量のジャンクレコード(約15000)を含むループを介して挿入してテストしました

4

3 に答える 3

1

OK、2つ。15kレコードは何もないので、ほとんど問題にはなりません。1億5000万行のテーブルを使用していますが、クエリは.005秒未満でも十分に実行されています

  1. InnoDBではなくMyIsamを使用していると思われます。MyIsamでは、挿入(または更新)するたびにテーブル全体がロックされます。したがって、誰かが投票している間、テーブルはロックされ、他の人はそこから読み取ることができません。数千人のユーザーがいる場合、これは問題になる可能性があります。

  2. 適切なインデックスがあることを確認してください。どのクエリが遅いか(そしてどれだけ遅いか!)はわかりませんが、検索している列にインデックスがあることを確認してください(おそらくmediaId)。

より良いアドバイスが必要な場合は、遅いクエリを投稿してください。

于 2012-09-10T11:41:37.817 に答える
1

テーブルスキーマの次の段階的なグラデーションを試すことができます。

//All id's are now unsigned , As you do not need any sign 
ALTER TABLE `voting` 
CHANGE `voteid` `voteid` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
CHANGE `mediaId` `mediaId` INT(11) UNSIGNED NOT NULL, 
CHANGE `userId` `userId` INT(11) UNSIGNED NOT NULL, 
//ENUM datatype as you need only 2 type of value
CHANGE `voteMode` `voteMode` ENUM('1' , '2') NOT NULL ; 

//Adding index , it will surely increase some speed
//Do **not use** index in **columns you do not need**
ALTER TABLE  `voting` ADD INDEX (  `mediaId` ,  `userId` ) ;

インデックス作成の詳細については、Mysqlインデックスを参照してください。

MyISAM Storage Engineを使用している場合は、InnoDBStorageEngineを使用することをお勧めします。使用するエンジンを決定するのに役立つ場合があります。

そしてあなたを助けるかもしれない他のいくつかのハックは次のとおりです:

  1. MySQLクエリキャッシュ
  2. PHPのプリペアドステートメント
  3. COLUMNSパーティショニング

MySqlデータベースの最適化に関するいくつかのリソース:

  1. MySQLチューニング
  2. MySQLの最適化
  3. 実世界のスケーラビリティMySQL
于 2012-09-10T11:43:44.040 に答える
0

xメディアに投票したユーザーを追跡し、すべてのユーザーが投票した場合、最小データ量はusers * mediaです。

データを減らしたい場合は、譲歩する必要があります。おそらく、ユーザーに匿名で登録して投票させますか?個人的な好みがそこの投票行動から抽出できる場合、ほとんどのユーザーはあまり満足していません。

于 2012-09-10T11:29:45.023 に答える