2012-02-23 12 views
15

Afaik、SQLiteは1つのファイルを1つのファイルに格納します。これは大きなデータベースを扱うときのパフォーマンスを低下させるので、DB全体を1つのファイルに格納せず、別のファイルを異なるファイルに格納するようにSQLiteに明示することは可能ですか?単一のSQLiteデータベース用の複数のファイル

+0

なぜ必要なのですか?達成できない機能は何ですか?または、単一のDBファイルを使用して発生する可能性のある問題? –

+2

私はOracle DBをSQLiteに置き換える予定です。 1日を通して何千ものトランザクションが発生し、単一のファイルを読み書きすることがプロセスの速度を落とす恐れがあります。 とにかく、SQLiteはそのような大きなデータベースを扱う最良の選択肢ではないようです。 – thameera

答えて

5

これらのテーブルを結合する必要がない場合は、手動でDBを分割し、どのテーブルがどのDB(=ファイル)にあるかを言うことができます。

DBに複数のファイルを分割することはできません。ファイル名を指定してDBに接続するためです。

+0

テーブルを異なるDBとして持つことはできません。また、SQLiteでは最大添付データベース数が62に制限されています。 :( – thameera

2

SQLiteデータベースファイルは、パフォーマンスの低下なしに非常に大きくなる可能性があります。パフォーマンスが低下する可能性があります

ものがあります:

  • ファイルロック競合
  • テーブルサイズ(インデックスを使用して、書き込みクエリを発行する場合)

はまた、デフォルトでは、SQLiteは制限しますnumber of attached databases to 10

とにかく、try partition your tables。 SQLiteがこのように非常に大きくなることがわかります。

+0

リンク先から理解している限り、パーティション化の概念は自己実装されています.SQLiteには他のRDBMSと同様にビルドインパーティション化のサポートはありません。 –

10

質問は約3歳ですが、私は非常に同じ質問を検索したときにここに上陸しました。後期私はそれが可能であること、が分かった:

使用

sqlite3.exe MainDB.db

ATTACH DATABASE 'SomeTableFile.db' AS stf;

アクセス、他のデータベースファイルからテーブル

SELECT * FROM stf.SomeTable;

複数のファイルにまたがることもできます

SELECT * 
FROM MainTable mt 
JOIN stf.SomeTable st 
ON (mt.id = st.mt_id); 

https://www.sqlite.org/lang_attach.html

tameeraは62アタッチされたデータベースの制限があると述べたが、私はそれを確認することはできませんので、私はその制限を打つことはありません。

特別なケースの他にも大きな利点は、データベースファイルの断片化を制限し、各テーブルでVACUUMコマンドを個別に使用できることです。

+2

「SQLite_LIMIT_ATTACHED」接続に接続できるデータベースの数を制限するための制限スイッチがあります。たぶん、タメラがその限界に達したのだろうか? – Sampath

関連する問題