• ベストアンサー

データ量が多すぎると、テーブルを分けたほうがいい?

質問があるのですが、よろしくお願いします。 例えば、ミクシーで、日記機能がありますが、もしミクシーがMySQLを使っているとしたら、あの日記に書き込まれるコメントのデータはどのようにテーブルに格納されているのでしょうか?? 一つのテーブルで済まそうとするとデータがかなり膨大になって検索に時間がかかるのではないかと思うのです。 例えばid1番からid100番までの日記のコメントのデータは、nikki_comment_100_tというテーブル、id101番からid200番までの日記のコメントのデータはnikki_comment_200_tというテーブル、というように、いくつかに分割して格納してたりするのでしょうか?それとも、一つのテーブルで十分事足りるのでしょうか?? また、もし前者のように分割して分けているとしても、それは顧客が多くデータが膨大なミクシーのような大規模なサイトならではのことで、これから人を集めようとしている現段階では小規模なサイトのデータベースなら、わざわざテーブルを分割してデータを格納することはない・・・とかそんな感じなのでしょうか? どなたか分かる方いらっしゃいましたら、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

>データがかなり膨大になって検索に時間がかかるのでは 一般的にDBMSには、B-TREE形式などのインデクスが実装されており、データ量が増えたからといって、極端に性能が悪化することはない仕組みになっています。 >いくつかに分割して格納してたりするのでしょうか? テーブルを分割する目的は、以下のようなものです。 (1)テーブルの容量が、OSのファイルシステムの上限を超える。 (2)負荷分散 (3)デフラグなどの運用、障害発生時などで、システムの縮退運用を可能とする あなたが考えているのは、(1)ですが、そういった理由で分割するケースは、そう多くはないと思います。 一般的にはユーザidなどで接続するサーバを分け、接続ユーザ数が増えた場合でも、一定の性能を確保できるようにします。 また、デフラグなどの運用を行う場合、一つのテーブルに集約してしまっていると、一時的にサービスを全面停止しなければならなくなります。テーブルなどを分割しておくことで、いくつかのサービスを継続しながら、メンテナンスといった運用を行うことが可能になります。 小規模なシステムの場合は、当初は負荷分散などを行わず、接続ユーザ数の増加などを契機として、負荷分散させるといったことは、一般的に行われていることです。

すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

#3回答者です。 文言を一部訂正します。 【変更前】 あなたが考えているのは、(1)ですが、そういった理由で分割するケースは、そう多くはないと思います。 【変更後】 データ量が多くなると(1)に該当するケースが出てきますが、そういった理由だけで分割するケースは、そう多くはないと思います。

miraikako
質問者

お礼

返事が異様に遅れてすいません。。 ご教授くださった方々ありがとうございました。 参考にさせていただきます。

すると、全ての回答が全文表示されます。
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

がると申します。 この手の話題は色々と個人差などもありますので、一つの参考意見として捉えていただければ。 まず「1テーブルのレコード件数が多い場合」ですが、確かにおっしゃるようなやり口は存在します。 ただ、いくつか条件があって。基本的には「情報が交わらない場合」ってのが概ね鉄則かと。 おっしゃられている例ですと、ユーザIDによって分割しているので。その場合「ユーザをまたいだ検索がない(若しくは非常にレアである)場合」なら、考慮すべき方向性であるかと思われます。 で、その場合。設計的には「n個のテーブルを用いる」設計にし、とりあえずnを1にして作成、後にnの数字をもちあげていきます。 で、この方向性をもっと持ち上げると「異なるDBサーバにデータを持つ」手法というのがありまして(物理的に「違う」サーバにデータを入れる)。 実際、これで実装したケースもあります。 こういった手法は別に愚の骨頂でもなんでもなくて。 状況次第では、十分に考えられうる方向性の一つかと思われます。 ただまぁ「一般的ではない」のは事実で、それにはそれなりの理由があるので。こういった方向性の設計の採用に関しては、特に丹念に考慮してしすぎることはない、とは思いますが。

すると、全ての回答が全文表示されます。
  • 0KG00
  • ベストアンサー率36% (334/913)
回答No.1

件数が多いぐらいでテーブルを分けるのは愚の骨頂です。 件数が増えた場合にテーブルを追加した場合のプログラムの修正範囲が巨大になりすぎるかと。 大規模といってもせいぜい数千万件ぐらいですよね検索はデータベース側で色々な仕組みが備わっている場合が多いですので、件数が10倍になったからといって待ち時間が10倍にはならないです。 http://dev.mysql.com/doc/refman/4.1/ja/mysql-indexes.html http://www.daito.ac.jp/~ikeuchi/webdb/mysql_5.html 仮にMySQLだったとしたら、インデックスを使っているでしょうね。Oracleなら主キーにはインデックスは漏れなく作成されていましたが、MySQLはどうか解りません。

すると、全ての回答が全文表示されます。