人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQLiteのファイルサイズの限界について質問します。

PHP+SQLite2で顧客管理システムを開発して、お客様に使っていただいております。
現在はとても軽快に動いているのですが、2年目で、ファイルサイズが400MBをこえてきました。
SQLiteについて調べてみると、ファイルサイズの限界が1GB、2GBと書いてあるサイトを見つけ、とても心配になってしまいました。

SQLiteの限界になり、データベースが止まってしまうと大変な事になってしまうので、最悪の場合、MySQLに移行も、考えなければいけないのかなと思っています。

できればこのまま何事もなく動作させたいのですが、SQLite2のファイルサイズの限界を変更させることはできないのでしょうか?

また、なんとか問題を回避する方法は無いものでしょうか。


●質問者: Chroto
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● Iwa
●75ポイント

古いSQLite2も同じかどうかはわかりませんが、少なくとも現行のSQLite3は128TiBが最大です。
ただ、こんなにあっても結局はファイルなのでファイルシステムに依存します。(例えばFAT32で使ってると2GiBしか使えないです)

http://www.sqlite.org/fileformat2.html

The maximum size database would be 2147483646 pages at 65536 bytes per page or 140,737,488,224,256 bytes
(最大サイズはデータベースには、ページあたり65536バイトまたは140,737,488,224,256バイトで2147483646ページになります)


Chrotoさんのコメント
なるほど、ファイルシステムに依存するのですね。 現在、さくらのマネージドサーバ最上級プランを利用していまして、UnixのFreeBSDとのことです。 ファイルシステム、調べてみようと思います。

2 ● a-kuma3
●75ポイント

SQLite 自体は、かなり大きいサイズが扱えるんです。
現在のドキュメントでは、140 TB ということになってます。
http://www.sqlite.org/fileformat2.html

The maximum size database would be 2147483646 pages at 65536 bytes per page or 140,737,488,224,256 bytes (about 140 terabytes).


ただ、SQLite の特徴の一つでもある、単一のファイルで可搬性がある、というのがネックになることがあります。
http://www.sqlite.org/different.html

Single Database File
An SQLite database is a single ordinary disk file that can be located anywhere in the directory hierarchy.
...


SQLite が動作する環境の OS やファイルシステムが単一のファイルとして扱えるサイズの影響を受けてしまうんです。

例えば、Windows で言うと、ファイルシステムが FAT16 だと、ひとつのファイルサイズは 2GB までなので、それ以上はプログラムが扱えません。
独立したシステムではなく、ライブラリとして動作する SQLite では、どうしようもない制限です。

また、SQLite を使うプログラムが使えるメモリサイズが、OS の影響を受けます。
Windows の 32bit 版では、プロセスが扱えるのは 2GB までなので、プログラムの組み方にもよりますが、扱えるデータ量に影響を与えます。

その制限を緩めるためには、以下のような対応をすることになります


Chrotoさんのコメント
140TB! なんだか、安心しました・・。 わかりやすい説明ありがとうございます。 なるほど、OSやファイルシステムに影響されるんですね。 勉強になりました。 現在、さくらのマネージドサーバ最上級プランを利用していまして、UnixのFreeBSDとのことです。 FreeBSDバージョンが分からないので、あまりよくわかりませんが・・・

3 ● oil999
●75ポイント

SQLite2の規格上のファイルサイズの上限は140Tバイトです。
http://www.sqlite.org/fileformat2.html

しかし、OSのファイルシステムの上限によって制限される場合があります。
たとえばFAT16ベースのWindowsだと2Gバイトまでしか扱えません。FAT32でも4Gバイトが上限です。NTFSでは2Tバイトです。


Chrotoさんのコメント
SQLite2の規格、140Tバイトなのですね。 SQLite3だけかと思っていたので、とても安心しました。 ありがとうございます。

4 ● y-kawaz
●75ポイント

SQLiteのファイルサイズが140TB行けるからといって安心するのは早計です。仕様上の上限と実用上の上限は全く別物ですので。
使い方やテーブル構造にもよりますが、経験上レコード数が10万を超えたりファイルサイズが数GB?10GBを超える位になると目に見えて性能が劣化してきて使い物にならないレベルになってきます。

まぁ、400MB程度なら余裕だとは思いますが今後の増加ペースを考えたら他のDBへの移行は早めに考えたほうが良いと思いますよ。
個人的には、快適に使える限界は余裕を持って1GBまでくらいかなと考えてます。


Chrotoさんのコメント
そうですか・・・現在レコード数が50000近くありますので、 他のDBへの移行も、検討しようと思います。 ありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ