PHP+SQLite2で顧客管理システムを開発して、お客様に使っていただいております。
現在はとても軽快に動いているのですが、2年目で、ファイルサイズが400MBをこえてきました。
SQLiteについて調べてみると、ファイルサイズの限界が1GB、2GBと書いてあるサイトを見つけ、とても心配になってしまいました。
SQLiteの限界になり、データベースが止まってしまうと大変な事になってしまうので、最悪の場合、MySQLに移行も、考えなければいけないのかなと思っています。
できればこのまま何事もなく動作させたいのですが、SQLite2のファイルサイズの限界を変更させることはできないのでしょうか?
また、なんとか問題を回避する方法は無いものでしょうか。
古い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ページになります)
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 までなので、プログラムの組み方にもよりますが、扱えるデータ量に影響を与えます。
その制限を緩めるためには、以下のような対応をすることになります
140TB!
なんだか、安心しました・・。
わかりやすい説明ありがとうございます。
なるほど、OSやファイルシステムに影響されるんですね。
勉強になりました。
現在、さくらのマネージドサーバ最上級プランを利用していまして、UnixのFreeBSDとのことです。
FreeBSDバージョンが分からないので、あまりよくわかりませんが・・・
SQLite2の規格上のファイルサイズの上限は140Tバイトです。
http://www.sqlite.org/fileformat2.html
しかし、OSのファイルシステムの上限によって制限される場合があります。
たとえばFAT16ベースのWindowsだと2Gバイトまでしか扱えません。FAT32でも4Gバイトが上限です。NTFSでは2Tバイトです。
SQLite2の規格、140Tバイトなのですね。
SQLite3だけかと思っていたので、とても安心しました。
ありがとうございます。
SQLiteのファイルサイズが140TB行けるからといって安心するのは早計です。仕様上の上限と実用上の上限は全く別物ですので。
使い方やテーブル構造にもよりますが、経験上レコード数が10万を超えたりファイルサイズが数GB~10GBを超える位になると目に見えて性能が劣化してきて使い物にならないレベルになってきます。
まぁ、400MB程度なら余裕だとは思いますが今後の増加ペースを考えたら他のDBへの移行は早めに考えたほうが良いと思いますよ。
個人的には、快適に使える限界は余裕を持って1GBまでくらいかなと考えてます。
そうですか・・・現在レコード数が50000近くありますので、
他のDBへの移行も、検討しようと思います。
ありがとうございます。
なるほど、ファイルシステムに依存するのですね。
2012/06/30 22:26:15現在、さくらのマネージドサーバ最上級プランを利用していまして、UnixのFreeBSDとのことです。
ファイルシステム、調べてみようと思います。