すべての基準を満たす優れたフォーマットが1つあります。
SQLite!
アプリケーションファイル形式としてのSQLiteの使用に関する記事をお読みください。また、このトピックについては、D。Richard Hipp(SQLiteの作成者)によるGoogleTechTalkをご覧ください。
それでは、SQLiteがどのように要件を満たしているかを見てみましょう。
フォーマットは「標準」です
SQLiteは、ほとんどのモバイル環境、および多くのデスクトップアプリ(Firefox、Thunderbird、Google Chrome、Adobe Readerなど)で選択される形式になっています。
C++と簡単に統合できます
SQLiteには標準のCインターフェースがあり、これは1つのソースファイルと1つのヘッダーファイルのみです。C++ラッパーもあります。
表形式の入力をサポート(2次元、n次元)
SQLiteテーブルは想像できる限り表形式です。たとえば3次元データを表すには、列x,y,z,value
を含むテーブルを作成し、次のようにデータを行のセットとして保存します。
x1,y1,z1,value1
x2,y2,z2,value2
...
PODタイプをサポート
PODとは、プレーンオールドデータまたはBLOBを意味していると思います。SQLiteを使用すると、BLOBフィールドをそのまま保存できます。
より多くの入力が必要になると拡張でき、変数にうまくバインドします
これが本当に輝いているところです。
解析速度はそれほど重要ではありません
しかし、SQLiteの速度は素晴らしいです。実際、解析は基本的に透過的です。
理想的には、読むのと同じくらい簡単に書く(反映する)ことができます
INSERT
書き込みと読み取りに使用するだけSELECT
です-何が簡単でしょうか?
WindowsとLinuxでうまく機能します
あなたは賭けます、そして他のすべてのプラットフォームも同様です。
合成をサポートします(1つのファイルが別のファイルを参照して読み取る)
あるデータベースを別のデータベースにアタッチできます。
人間が読める形式
バイナリではありませんが、そこには多くの優れたSQLiteブラウザ/エディタがあります。私はWindowsのSQLiteExpertPersonalとLinuxのsqlitemanが好きです。Firefox用のSQLiteエディタープラグインもあります。
SQLiteが無料で提供する他の利点があります:
データは索引付け可能であるため、検索が非常に高速になります。XML、JSON、またはその他のテキストのみの形式を使用してこれを行うことはできません。
データ量が非常に多い場合でも、部分的に編集することができます。1つの値を編集するためだけに、数ギガバイトを書き直す必要はありません。
SQLiteは完全にトランザクション型です:データが常に一貫していることを保証します。アプリケーション(またはコンピューター全体)がクラッシュした場合でも、データベースへの最初の接続試行時に、データは最後の既知の整合性のある状態に自動的に復元されます。
SQLiteはデータを逐語的に保存します:データ内のジャンク文字(文字列に埋め込まれたゼロバイトを含む)をエスケープすることを心配する必要はありません-常にプリペアドステートメントを使用するだけで、データを透過的にすることができます。これは、テキストデータ形式、特にXMLを扱う場合、大きくて厄介な問題になる可能性があります。
SQLiteはすべての文字列をUnicodeで保存します:(UTF-8
デフォルト)またはUTF-16
。つまり、テキストエンコーディングやデータ形式の国際的なサポートについて心配する必要はありません。
SQLiteを使用すると、データを小さなチャンク(実際には行ごと)で処理できるため、メモリが少ない状態でもうまく機能します。多くの場合、テキストを解析するためにすべてのテキストをメモリにロードする必要があるため、これはテキストベースの形式では問題になる可能性があります。確かに、効率的なストリームベースのXMLパーサーはほとんどありませんが、一般に、どのXMLパーサーもSQLiteと比較してかなりメモリに貪欲です。