0

現在、自作のファイル形式で保存されている非常に単純な構造化データがありますが、より最新のものに移行する必要があるかどうか疑問に思っています。データは、列doubleによって索引付けされた単純な の表です。double私が実行する必要があることは次のとおりです。

  • テーブルを反復処理します。
  • 任意のレコードの挿入と削除。
  • 特定のキー値の前後の特定の数の行を選択する (キーがデータベースにない可能性がある場合)。

要件は次のとおりです。

  • ストレージは、サーバーを使用せずにファイル ベースである必要があります。
  • ファイル全体をメモリに読み込む必要はありません。
  • 結果のファイルは、異なるアーキテクチャ間で移植可能でなければなりません (wrt エンディアンネス...)
  • 非常に安定したプロジェクトである必要があります (データは非常に重要です)。
  • Solaris/SPARC で実行する必要があり、できれば Linux/x64 でも実行する必要があります。
  • アクセス時間はできるだけ速くする必要があります。
  • C++ ライブラリとして利用できる必要があります。Fortran および Python バインディングのボーナス ポイント :)
  • 倍精度よりも高精度のオプションの数値表現はおまけです。
  • 比較的コンパクトな収納サイズもおまけです。

私の限られた経験から、sqliteは興味深い選択であり、sqlite が十分に高速でない場合は、おそらく非サーバー モードのmysqlです。しかし、本格的な SQL データベースはやり過ぎではないでしょうか?

何を指示してるんですか?

4

1 に答える 1

1

SQLite はほぼすべての要件を満たし、使用するのはそれほど難しくありません。試してみる!

  • ファイルベースで、データベース全体が 1 つのファイルです。

  • ファイル全体をメモリに読み込む必要はありません。データベースのサイズが制限される場合があります。状況で制限が問題になるかどうかをここで確認する必要があります。

  • フォーマットはクロスプラットフォームです:

    SQLite データベースは、32 ビットと 64 ビットのマシン間、およびビッグ エンディアンとリトル エンディアンのアーキテクチャ間で移植可能です。

  • それは長い間存在しており、多くの場所で使用されており、一般的に成熟して安定していると考えられています。

  • 非常に移植性が高く、Solaris/SPARC および Linux/x64 で動作します。

  • 1 つのクライアントのみを考慮する必要があるため、MySQL (ただし、そのリンクの背後には塩の粒が存在します) や他のそのようなデータベース サーバーよりも高速です。

  • C++ APIPython バインディングFortran ラッパーがあります。

  • 任意精度の列型はありNUMERICませんが、正確に表現できない場合は暗黙のうちにテキストに変換されます。

    TEXT ストレージ クラスと REAL ストレージ クラスの間の変換の場合、数値の最初の 15 桁の有効桁数が保持されている場合、SQLite は変換がロスレスで可逆的であると見なします。TEXT から INTEGER または REAL への可逆変換が不可能な場合、値は TEXT ストレージ クラスを使用して格納されます。

  • データベースのコンパクトなストレージ、よくわかりません。しかし、SQLite が特に無駄であるという主張は聞いたことがありません。

于 2011-02-11T09:26:35.400 に答える