使用されるデータ構造のタイプは、アクセスするデータによって決まります。あなたが尋ねるべきいくつかの質問:
- セッションストアにはいくつのアイテムがありますか? 50? 100000? 10000000000?
- ストア内の各アイテムのサイズ (バイト サイズ) は?
- キーにはどのような文字列入力が使用されますか? アスキー-7? UTF-8? UCS2? ...
一般に、ハッシュ テーブルはルックアップに非常に適しています。自分で作成することで、速度を大幅に最適化できます(もちろん、テーブルのサイズを変更できます)。ハッシュ テーブルを使用してパフォーマンスを向上させるための提案:
- 適切なハッシュ関数を選択してください! これはできればハッシュ テーブル間で均等に分散され、計算に時間がかかりません (これはキー入力の形式によって異なります)。
- バケットを使用している場合は、長さが 6 を超えないようにしてください。バケットが 6 を超えた場合は、ハッシュ関数が十分に均等に分散されていない可能性があります。3 未満のバケット長が推奨されます。
- オブジェクトの割り当て方法に注意してください。可能であれば、参照の局所性を利用するために、メモリ内でそれらを互いに近くに割り当てるようにしてください。必要に応じて、独自のサブアロケーター/ヒープ マネージャーを記述します。また、アクセス速度を向上させるために、アライメントされた境界を維持します (アライメントはプロセッサ/バスに依存するため、特定のプロセッサ タイプをターゲットにするかどうかを決定する必要があります)。
BTree も非常に優れており、一般的に優れたパフォーマンスを発揮します。(誰かがここに btree に関する情報を挿入できます)。
保存しているデータを調べて、データができるだけ小さいことを確認することをお勧めします。必要に応じて、short、unsigned char、bit フィールドを使用します。構造体を割り当てると同時に、構造体の最後に文字列データを割り当てるなど、パフォーマンスを向上させる方法は他にもあります。すなわち
struct foo {
int a;
char my_string[0]; // allocate an instance of foo to be
// sizeof(int) + sizeof(your string data) etc
}
独自の文字列比較ルーチンを実装すると、実際にはパフォーマンスが大幅に向上することもありますが、これは入力データによって異なります。