ひとつのRDBのテーブルでは、実用上、何行くらいまでいけるのでしょうか? 2000億行程度は問題なくいけるのでしょうか?

オラクル、MySQL などで2000億行で、1000項目程度のデータを入れても問題はないのでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2010/10/10 23:55:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:Galapagos No.1

回答回数963ベストアンサー獲得回数89

理論的には2000億行でも可能ですが、1レコード1000項目というのは正規化されていない状態だと思います。

設計を見直してみてください。

http://www.kogures.com/hitoshi/webtext/db-seikika/index.html

id:isogaya

知りたいのは可能かどうかなんです。

2010/10/04 21:47:10
id:fenstrial No.2

回答回数57ベストアンサー獲得回数14

ポイント40pt

2000億行で、1000項目は、200兆のデータが存在することになり、各データ1バイトとしても、200TBになります。

実際にはペタバイトになるでしょう。


これを1テーブルにすることは現実的だとは思えません。


参考までに、eBayは2PBのデータ(テーブルではないですが)をもつようです。

http://www.dba-oracle.com/oracle_news/news_ebay_petafiles.htm

id:isogaya

非現実的かどうかでなくて、可能かどうかはどうなんでしょうか?

2010/10/04 21:48:19
id:niwa-mikiho No.3

回答回数516ベストアンサー獲得回数40

ポイント40pt

MySQL では DB エンジンとしてのレコード数に限界はありません。


しかし、fenstrial さんもおっしゃられている通り、データベースのサイズが膨大になるため

DB としての限界よりも、ストレージの限界が来ます。


質問にあるレコード数を実現するには 10万台の 2TB HDD が必要になり、1台 8000円 だとすると8億円が必要になります。

このほかにも必要な機器が沢山あるため、余程の大企業であれば可能でしょうが、

個人レベルでは不可能と考えたほうが良いかと思います。



ちなみに、保守の関係上全てのデータを1つのテーブルにぶちこむのは好ましくありません。

http://dummy/

id:isogaya

質問の条件には個人とは書いていません。

2010/10/05 20:38:40
  • id:windofjuly
    うぃんど 2010/10/04 06:35:27
    【1】2000億行で、1000項目程度のデータを入れても問題はないのでしょうか?
    以下、大雑把にデータ領域だけで算出することとし、他の要素(HDDやファイルシステムなど)による物理的あるいは論理的制限がないものとします
     
    1項目10バイトとして1000項目1レコードだけで10KB
    2000億レコードなので10KB x 200,000,000,000=2000PB(2EB)
     
    理論上のテーブルサイズ上限(あるいはデータベースサイズ上限)により対応は下記のような具合
    ORACLE テーブルサイズの上限設定は無いためデータベース全体の容量制限も特に見当たらないためクリアとする(9g時代には512PBという情報もある)
    SQLServer テーブルサイズの上限設定は無いためデータベース全体の容量制限を採用し512PBなのでアウト
    PostgreSQL 32TBなのでアウト
    MySQL (InnoDBの場合)64TBなのでアウト
    http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/server.111/E05771-04/limits.htm
    http://technet.microsoft.com/ja-jp/library/ms143432.aspx
    http://www.linux.or.jp/JF/JFdocs/PostgreSQL-FAQ.html
    http://dev.mysql.com/doc/refman/5.1-olh/ja/innodb-restrictions.html
     
    【2】実用上、何行くらいまでいけるのでしょうか?
    (1)検索時間
    ユニークインデックスでの単純な検索であれば容量の増大による検索速度の低下はあまり無いと考えられるでしょう
    インデックスが付与されていたとしても、ユニークでなければ非常で非情な時間を要してしまう事もあるでしょう
    http://www.hi-ho.ne.jp/tsumiki/doc_1.html
    http://www.shift-the-oracle.com/index/btree-index.html
    (2)他の要素(HDDやファイルシステムなど)による物理的あるいは論理的制限
    物理的限界のほうはHDDのクラスタ化により現在でも対応可能な範囲かもしれません
    データベースが直でHDDにアクセスするようにでもなれば、さらなる高速化も見込めるかもしれませんが、
    汎用データベースではファイルシステムを経由するため、これがかなりの足かせになります
    ファイルを高速検索するための仕組みはいろいろと考案され実用化を目指して多くの人が開発を行っています(それはまた別のお話)
    (3)集計
    上記2点と、SQL文の構成によるため一概には出せません
     
    安価なパソコン1台でも100万レコード程度のデータ量をやすやすとこなしてくれるご時世(設計者の技量にもよります)
    だからといって億単位のレコードを抱えるテーブルを用いたようなデータベース設計をすることも無いため(
    必要な分を必要なところに配分することによってパフォーマンスをあげるような設計を行うため)
    どこまでが実用かという率直な質問に対する回答を導くには至らず、参考にでもしてもらえればと思います
    (簡単そうな質問ほど、非情に難しい)
  • id:taknt
    変数の問題
    2000億という値を数値で保存する場合、何バイト必要なのか。
    それに対応していないと 使えない。
    現実的には 対応していないのでは?と思うが。

  • id:windofjuly
    うぃんど 2010/10/04 07:48:27
    takntさん>2000億という値を数値で保存する場合、何バイト必要なのか。

    38ビット 274,877,906,944
    5バイト 1,099,511,627,776
    計算してみると意外と大したこと無かったりしますね
     
    無制限を謳っているようなものなら、もっと用意してるのではないでしょうか。例えば64ビット(=8バイト)とか
    64ビット 18,446,744,073,709,600,000
    これだけあれば現時点での物理的限界どころの話ではないので、制限する必要は無いでしょう

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません