2009-03-29 21 views
9

official sqlite3 web pageには、fopen()関数の代わりにsqliteを考えるべきだと書かれています。fopen()の代わりにSqlite?

あなたはどう思いますか? sqliteを使用してアプリケーションの内部データストレージを再利用するのは常に良いソリューションですか?そのようなソリューションのプラスとマイナスは何ですか?

あなたはいくつかの経験がありますか?

編集: あなたの経験はどうですか?それは使いやすいですか?それは痛いのか、それとも楽しいのですか?あなたはそれが好きですか?

答えて

9

です。いくつかの禁忌があります:コンフィギュレーションファイル、プレーンテキストまたはXMLを使用するための

  • は、SQLiteのと同じくらい軽量一つでもデバッグがはるかに簡単であるか、リレーショナルデータベースを使用するよりも変更します。十分な例が存在していない、とハイパーリンクが悪い -

  • ツリー構造は、リレーショナル表

  • SQLiteのAPIはかなりひどい文書化されて
  • を使用するよりも(例えば)を使用してXMLを記述するのが容易です。あなたがそれを掘り起こすのが気になるならば、情報はすべてそこにあります。アプリ固有のバイナリ形式の

  • 使用が直接すべてあなたのデータではなく、その単一の不良にのロスを意味することができ、データベースにBLOBとして

  • データベースの破損を同じ形式で保存するよりも速くなりますファイル

OTOH、あなたの内部のデータはリレーショナルモデルにうまく適合し、それのAAがたくさんある場合、私はSQLiteのをお勧めします場合は - 私は私のプロジェクトの1のためにそれを自分自身を使用します。

私はそれを使いますが、それはうまく動作し、既存のコードとの統合が容易です。ドキュメントの移動が簡単だった場合は、5つの星を付けます。それは4つです。

+5

間違って文書化されていますか?私はそれが他のOSSプロジェクトと比べてとても良いと思います。彼らはすべての前提条件と事後条件をリストしていますが、例外を除いてAPIの理解には何の問題もありませんでした。 (彼らの事後条件の1つは、彼らが何をしているかを判断するのに必要な素敵な小さな "todo"ノートを持っています) – jalf

+0

データベースの破損については、データを別々のデータベースに分割するだけです。あなた自身のファイルの破損は、悪い - そして起こりそうなことでしょう。結局、データベースは堅牢で一貫性を保つように設計されています。 しかし、私はあなたの一般的な点に同意します。 – jalf

+1

@ jalfほとんど例はありません。私の基本的な罪は、文書化までです。また、ハイパーテキストリンクは非常に貧弱です。 –

1

SQLiteのアトミック性はプラスです。あなたが途中で何らかのデータを書き込むと(途中でクラッシュするかもしれない)、データファイルが破損しないことが分かっています。私は通常、成功したロードでファイルをバックアップすることによってXML設定ファイルと同様のことを達成し、将来の失敗したロード(破損を示す)が自動的に最後のバックアップをリストアします。もちろんそれは粒状でも原子でもないが、私の欲望には十分である。

+0

本当に、既存のデータファイルのバックアップを作成し、いつでも失敗しないような方法で新しいデータファイルを書き込む「正しい」方法を試してください。 –

+0

あなたの意見に「正しい」方法はありますか? – AaronLS

4

は、いつものように、それはあなたが、スタンドアローンのファイルにデータを格納する必要があり、SQLiteのよりSQLデータベースのリレーショナルデータベース機能を利用することができた場合は何の解決策

「ワンサイズはすべてに適合しない」があり、依存します素晴らしいです。

データがリレーショナルモデル(階層データなど)に適していない場合や、データを人間が読める形式(設定ファイル)にしたい場合や、SQLite以外のシステムと相互運用する必要がある場合は、役に立つとXMLが良いかもしれません。

一方、複数のプログラムやコンピュータから同時にデータにアクセスする必要がある場合は、SQLiteは最適ではなく、実際のデータベースサーバ(MS SQL、Oracle、MySQL、PosgreSQL ...)。

1

私はSQLiteを使うのが喜ばしいですが、私はfopen()の代わりに全サイズを使うことはできません。

例として、Webサーバーからイメージをダウンロードしてローカルにキャッシュするソフトウェアを書きました。それらを個々のファイルとして保存すると、エクスプローラで見ることができますが、確かに利点があります。しかし、私はキャッシュを使用するために、URLとイメージファイルをマップするインデックスを保持する必要があります。 それらをSQLiteデータベースに格納すると、それらはすべてすっきりした小さなファイルに収まり、URLでアクセスできます(キャッシュからimgdataを選択します(url = 'http://foo.bar.jpg')。