どくたーぺっぱーちぇりお

09<< 12345678910111213141516171819202122232425262728293031 >>11

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Ruby on RailsはSQLiteに、いったいいくつまでの数字を入れることが出来るのか?

なぜかぐぐってもわからなかったんだが。
みんなRailsのこと信用しているから、疑念すら抱かないのか知らんが。
信者かよ。( `д´) ケッ!

などと思ったのが疑問の始まりですが。
一説によると、既に答えは出ているようです・・・?

答え:いっぱい
いやそれはわかってはいるんだけれども。
3より大きな数字は、いっぱいで表現してもいいですよね。
ただしデータベースは別です。目を三角にしてキッチリカッチリクッキリ。( `д´) ケッ!

Ruby on RailsはSQLiteに、いったいいくつまでの数字を入れることが出来るのか?

大事なことなので、2回言いました。
なぜ大事なのか?
それはたとえば、データベースに格納するデータがたくさんある状況を考えてください。
データベースは一般的に、主キーとして、整理するための連番が自動的に付与されます。
この連番の上限はいくつなのか?それはつまり、いくつまでデータが格納出来る理屈になるのか?に他ならない。

SQLiteのメモ知識
参考にさせて頂いた:http://www.dbonline.jp/sqlite/type/index1.html
ここによれば、sqliteにデータが格納されるとき、5種類のタイプのデータにしかならない。
しかもそのうちの1つはNULLである。
その上取り扱いが柔軟で、カラムに対してデータ型を決めてもよいが、データ1つに1つのデータ型が格納される仕組み(!?)もあるような。

SQLiteのデータ型
INTEGER 符号付整数。1, 2, 3, 4, 6, or 8 バイトで格納
REAL 浮動小数。8バイト
TEXT テキスト
BLOB BinaryLargeObject=ファイルなどをバイナリのままの扱いで格納出来る

SQLiteは柔軟すぎて、俺のSQL脳(大脳の一部のSQLとの通信を司る部分)がおかしくなりそうだ。

一方でRuby on Railsは、ちょっとぐぐったらこんな感じだったが
参考にさせて頂いた:http://shin.moe-nifty.com/server/2006/10/ruby_on_rails__b15d.html
数値: primary_key,integer,float
文字列: string (255文字),text (文字数制限なし)
日付と時刻: date,time,datetime(またはtimestamp)
Yes/No: boolean
バイナリ: binary
となっているが、とくに数値の文字数制限に関してはどこを探しても見当たらない。

これでは、新しいHDDを買ったら容量大きすぎてBIOSが対応していなかった、みたいな感じに
データベースをアップグレードしたら、取り扱い可能な数値が大きすぎて、Railsが対応出来ないような事にならんのか、などと妄想したが。
対応データベースが決まっているから、いいのかな。

で、Raisのstringは、SQLiteのINTEGERなのだろう。
1, 2, 3, 4, 6, or 8 バイトというのが、上限だ。
データに数値を入れる時点で

-127〜127 =1byte
-32767〜32767 =2bytes
-8388607〜8388607 =3bytes
-2147483647〜2147483647 =4bytes
-549755813887〜549755813887 =5bytes
-140737488355327〜140737488355327 =6bytes
-9223372036854775807〜9223372036854775807 =8bytes

なんかしらんが、天文学的な数値になってた。
8バイトって、そもそも64ビットのことでしょう。64bit時代オソロシス。
桁数が多いためLibreOffice Calcでは(あるいはMS Excelもそうだろうが)計算出来ず。
SpeedCrunchマジおすすめ。結果を9.223372036854775807e18としていた。(設定変更すれば50桁までいける)

さて、この大量の数字は、つまり838万≒3バイト,21.4億≒4バイト,5兆4975億≒5バイト
1407兆3748億≒6バイト,9223京3720兆≒8バイト
ということか。データを何個、とかいうレベルじゃねーっす。パねえっす。
だから誰も具体的な数値としていくつ、とか言わない(?)のか何なのか。

だが、そもそも、railsが扱えるかは別問題であろう話。
railsを通してDB作成し、検証してみよう。
少なくとも今のバージョンでこうだ、というのであれ、わかればスッキリ。

railsでscaffoldしrails sしたあとブラウザから入力し、SQLiteに数値を格納してみた。

9223372036854775800 OK
9223372036854775900 NG(数字がおかしくなる)

9223372036854775806 OK
9223372036854775807 OK
9223372036854775808 NG(数字がおかしくなる)
NGの数値を入力したところ、数値が溢れてたデータの入力も出来たし、編集で入力済みデータを呼び出すこともできるが、格納されたデータを呼び出してみると浮動少数になってしまっているようだ。(〜〜〜.0 とか表示されてしまって入力値と異なる数値になってる)

しかし、これで先程の計算通りで合っていることがわかった。
答え:いっぱい
なんだ、最初の結論で合っていたのか。
関連記事

COMMENT▼

コメントの投稿

管理者にだけ表示を許可する

TRACKBACK▼

http://doctorpeppercheerio.blog.fc2.com/tb.php/53-35c2d590

この記事にトラックバックする(FC2ブログユーザー)

 | ホーム | 

プロフィール

だーくちぇりー

Author:だーくちぇりー
名前:darkcherry(だーくちぇりー)
特技:器用貧乏
職業:まぜまぜ屋

QRコード

QR

検索フォーム

    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。