0

現在、私のプログラムにはメモリに多くのセッションがあります。セッションはunsigned int ID、いくつかの変数 + 可能な長いサイズstd::map(セッションごとに異なるサイズ) を持つオブジェクトです。

一部のセッションをディスクにアンロードしたいのですが、ディスク上の構造を整理して、必要に応じてディスク上でセッションをすばやく見つけてロードする機会を得る方法がわかりません。ディスク上のIDでセッションをすばやく見つける方法は? いくつかのインデックスかもしれませんが、それらを使用する方法がわかりません...または追加の変数ですか?

* SQL データベース *は私のバリアントではありません。安定性、リソースの過剰使用、移植性、互換性などは、他のデータベースがディスク上で行うのと同じように整理する必要があるためです。

ありがとう、そして私の英語でごめんなさい。間違っている場合はテキストを編集してください

4

3 に答える 3

6

データベースを使用してください。これはまさにデータベースが適していることです。

于 2012-06-03T18:17:35.420 に答える
6

SQLiteそのためにライブラリを使用できます。C/C++ インターフェイスも備えています。

また、SQLite はクロスプラットフォームでポータブルなデータベースです。これは、ハードディスク上の他のファイルと同様に、単なるファイルです (単一のファイルを持つことができます)。そのために巨大なソフトウェアをインストールする必要はありません。軽くて便利です。

于 2012-06-03T18:19:00.827 に答える
2

このような多くのサイトで、「なぜそれをしたいのですか?」という単純な質問に多くの人が答えているのはなぜですか? または、その人に答えていない代替案を提供しますか? (このページの下部にある「あなたの答え」ボックスを読んでください) もっと良い方法があるか、その人がかなりの時間を無駄にしている可能性があります。しかし、彼らは、それがどれほどうまく機能していても、解決策を試して考え出すという楽しみのために努力しているのかもしれません. @abrahabは明らかにこれをやってみたいと思っています(そして彼はそれを非常に明確にしようとしています)ので、彼の質問に答えるか、答えがわからない場合は静かにしてください。

@abrahab、1 つの方法は、バイナリ ファイル形式を使用してセッション データを保存することです。別のファイルに保存されたセッション ID (Google btree) に btree インデックスを使用します。各セッション ID の下の btree に格納された値は、バイナリ レコードが開始するデータ ファイル内の位置へのファイル ポインターです。ファイルから読み取られる最初のバイト (short int、int、long) は、レコードの長さをバイト単位で示し、それらのバイトを読み取って処理します。セッション レコードの形式 (構造体など) を定義するのはあなた次第です。レコードを編集/削除/挿入する場合は、そのレコードの btree を更新し、データ ファイル内で再配置されるすべてのレコードを更新する必要があります。

DB を使用する方が簡単ですが、これがやりたいことであれば、これは機能し、パフォーマンスは非常に優れているはずです。レコード内の特定の値を検索する場合は、それらの値を使用して別の btree を構築できますが、DB ルートを真剣に検討するのはそのときです。

于 2012-06-09T14:27:15.497 に答える