一定時間(または可能な限り最も近い)で、Mnesiaテーブルのインデックス付き列の最大値または最小値を見つけるにはどうすればよいですか?
2 に答える
私は Mnesia データベースの外でそれを行います。テーブルへの挿入があるたびにこれらの値について学習するプロセスを持つことにより、明示的な最小値と明示的な最大値を保持します。これにより、値の定数時間ルックアップが非常に高速になります。
O(lg n) 時間で処理できる場合は、テーブルを Ordered_set にすることができます。そこから、キーに注文したものが含まれていることを考えるfirst/1
とlast/1
、必要なものが得られるはずです。ただし、これにより、一般的に他のクエリが O(lg n) まで遅くなります。
3 番目のトリックは、近似値を使用することです。ときどきテーブルをスキャンして、最大値と最小値を書き留めます。これにより、必要なものが具体化されますが、最後にスキャンしてから長い時間が経過している場合、値が最新ではない可能性があります.
良い質問ですが、私はそれが可能だとは思いません。mnesia と qlc のドキュメントをざっと見ても、この件に関する手がかりは得られませんでした。
mnesia の二次キー機能は不完全であり、機能が非常に限られているように私には思えます。索引付けされたテーブルをロードする際の恐ろしい記憶喪失の起動時間は言うまでもありません。
あなたの場合、最も信頼できる解決策は、明示的なインデックス作成を行うことだと思います。たとえば、実際にはインデックスを作成したい値である主キーの順序付けを使用して、テーブルと一緒に作成して同期を維持します。