私はデータベース設計の専門家ではないので、CS用語で翻訳する前に、必要なことをわかりやすく説明します。大きなサブセット(たとえば、約100Moのdouble)をすばやく反復する正しい方法を見つけようとしています。 )データの、潜在的に非常に大きなデータセット(たとえばいくつかのGo)。基本的に4つの整数(キー)と値、単純な構造体(1ダブル1ショート)で構成されるオブジェクトがあります。私のキーは少数の値(数百)しか取ることができないので、データをツリーとして保存するのが理にかなっていると思いました(キーごとに1つの深さ、値は葉であり、少なくとも私の素朴なビューではXMLのXPathに似ています) 。
キー値/それらのキー値の関数に基づいて、リーフのサブセットを反復処理できるようにしたいと思います。フィルタリングするキーの組み合わせは異なります。これは横断検索と呼ばれていると思いますか?
したがって、同じキーをn回比較しないようにするには、理想的には、キーの順列ごとにデータ構造にインデックスを付ける必要があります(12の可能性:!4 /!2)。これboost::multi_index
が目的のようですが、smthを見落とさない限り、これを行う方法は、実際にこれらの12のツリー構造を構築し、値ノードへのポインターをリーフとして格納することです。キーに比べて値のサイズが小さいことを考えると、これはスペース効率が非常に悪いと思います。
私が使用すべき設計/データ構造に関する提案、またはこれらのトピックに関する簡潔な教材へのポインタをいただければ幸いです。