問題タブ [multikey]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 複数のキーを持つマップ
次のようなマップを実装しようとしています
マップには 2 つのキーが含まれている必要があり、対応する値はリストになります。少なくとも 1 つのキー値が等しい場合、同じリストにレコードを追加したい たとえば、次のレコードを考えてみましょう
すべてを同じリストに挿入する必要があります
Guava テーブルまたはcommons MulitKeyMapを使用できません(これだけのためにライブラリ全体を含めたくない)。
key1
私は属性として と の両方を持つクラス (キーとして使用できる) を実装しようとしましたがkey2
、key1 と key2 を考慮しない効果的なハッシュコードの実装は少し (または多くの場合) トリッキーに見えます
すべてに同じハッシュコードを使用しても機能しますが、数千のレコードがあるため、パフォーマンスに影響します。
編集:
ネストされたマップを使用することはできません
一部のレコードにはキーが 1 つしかない場合があります。
ここで、R3 には key1 がないため、R1 および R2 と同じ場所に挿入することはできません
編集2:
私も介入命令を維持したいと思います。
mongodb - マルチキー インデックスを使用して、同じ MongoDB ドキュメントを単一のカーソルに複数回表示できますか?
時系列データをセッション ドキュメントにまとめることを検討しています。各セッション内には、一連のイベントがあります。各イベントにはタイムスタンプがあります。これらのイベントのタイムスタンプでマルチキー インデックスを作成できることはわかっていますが、1 つのクエリで同じドキュメントが 2 回表示されるのを防ぐために MongoDB がどのようなメカニズムを使用しているかに興味があります。
明確にするために、次のドキュメントを含むセッションのコレクションを想像してください。
でマルチキー インデックスを追加するとdb.sessions.ensureIndex({'events.time' : 1})
、そのインデックスの B ツリーは次のようになります。
でコレクションをクエリすると{'events.time': {$gte: '10:00'}}
、MongoDB は b ツリーをスキャンして次を返します。
A
Mongoは、カーソル内の 3 番目の結果としてドキュメントが 2 回目に表示されるのをどのように防ぎますか? 小さなインデックス スキャンの場合は、どのドキュメントが既に表示されたかを追跡できますが、インデックスが膨大な場合はどうなるでしょうか。同じドキュメントが単一のカーソルに複数回表示される場合はありますか?
私の仮定は、そうではないということです。Mongo は、スキャンしているドキュメントを見て、インデックス付き配列内の以前のエントリを調べることで、スキャンの早い段階で既に一致していたことを検出できます。ただし、MongoDB のドキュメントではこの動作について言及されていないため、実際に何が起こるかを知ることが重要です。
(注:カーソルがスキャンされている間にドキュメントが変更された場合、ドキュメントが単一のクエリに複数回表示される可能性があることは知っています。これは、時系列データに対するクエリでは問題になりません。スキャン中に新しいイベントがセッションに追加されたとしても、Mongo が上記の検出メカニズムのようなものを使用すれば、移動したドキュメントをクエリ結果から除外できるはずです。)
mongodb - マルチキー インデックスが MongoDB で indexOnly クエリをブロックするのはなぜですか?
MongoDB のコレクションからデータを読み取るときにインデックスのみを使用しようとしています。これは、いくつかの大きなドキュメントがあるためです。このクエリでは、必要なフィールドは 1 つだけです。
インデックスが multiKey インデックスの場合、indexOnly = true を使用できないことがわかりました。
これが私が作ったテストです:
-> indexOnly = true、isMultiKey = false
-> indexOnly = false、isMultiKey = true
ドキュメントには、マルチキー インデックスのいくつかの制限について言及されていますが、これについては言及されていません。multikey と indexonly の両方を使用する方法を知っている人はいますか?
java - コンテナ オブジェクト キーを持つ Java Map、コンテナ オブジェクト フィールド値によるルックアップ?
単純な Java オブジェクトがあるとしましょう。それを DefinedData と呼びましょう。これには、文字列、整数、列挙型、さらには 1 つまたは 2 つの文字列のセットなど、さまざまなタイプの最終フィールドが多数含まれます。全体として、これは比較的単純なデータ コンテナーにすぎません。これらは潜在的に 1k から 2k あり、すべて静的な最終オブジェクトです。これらのフィールドのほとんどは、他の DefinedData オブジェクトがそのフィールドに対して同じ値を持つことがないという点で一意です。
これらは (DefinedData, Object) の Map に配置されます。ここで、DefinedData オブジェクトがあれば、そのオブジェクトを Map から簡単に取得できますが、一意のフィールド値が 1 つしかない場合はどうでしょうか? それを単にマップに渡すことはできません。キーとチェックを反復処理する必要があります。これは、DefinedData の各フィールドのルックアップ メソッドでマップをラップすることを意味します。実行可能ですが、特にマップに多くの値があり、多くのルックアップがある場合、これは可能です。それか、DefinedData オブジェクトのルックアップが必要になります。これも一連のマップになります...
これは、データベースの仕事 (任意の列に基づいて検索する) のように思えますが、これはこの特定の問題に対する適切な解決策ではありません。また、それぞれが DefinedData から Object に 1 つのフィールドをマッピングするさまざまなマップを持つことは避けたいと思います。私が見たマルチキー マップは、1 つだけでなくすべてのキー値を必要とするため、適用できません。この特定の問題を処理できるマップ、コレクション、またはその他の実装はありますか?
mongodb - mongoDB でのコレクション データ モデリング
たとえば、 A <-> interact <-> B などのプロファイル インタラクションのモデルを設計したいと考えています。インタラクションには、A と B の共通フィールドが含まれています
。Interactions というコレクションがあるとします。ベスト プラクティス ソリューションの場合。
インタラクションをプロファイルごとに 1 つずつ、2 つの異なるドキュメントに分けます。
長所: 高速読み取り
短所: 共通フィールドの各更新は、両方のドキュメントで実行する必要がありますインタラクション用に 1 つの文書を維持する
長所: 共通フィールドを 1 回だけ更新する
短所: トリッキーな読み取り
問題は、多くの読み取りがあるだけでなく、多くの更新もあり、このコレクションは何百万ものドキュメント用に設計されている必要があるということです.
私のシナリオでの一般的なクエリ:
- プロファイル インタラクションを取得する
- 特定のプロファイル インタラクションを更新する
私は pid のマルチキー インデックスに依存して高速なドキュメント検索を行う 2 番目の選択肢に傾いています。
シャード コレクションの経験はありませんが、マルチキー インデックスがシャーディング キーとしてサポートされていないことに気付きました。
その種のインデックスで読み取りは十分に高速ですか?私のユースケースでは他の選択肢がありますか?
あなたの答えは高く評価されています。
mongodb - 別のマルチキーインデックスを使用した地理空間インデックス...解決策はありますか?
以下のようなコレクションがあります。「場所」と「product_list.id」をインデックス化したい。MongoDB は、ドキュメント内で単一のマルチ キー インデックスのみを許可するようです。回避策はありますか?
pygame - Pygameの複数キーの奇妙な動作
私は pygame でゲームを作成していますが、次のコードで問題が発生しました:
上矢印または下矢印を押したまま、右または左のキーを押しても何も起こらず、elif が解決されません。なんで ?これを別の方法で行う必要がありますか?
すべての「elif」を「if」に置き換えると、逆のことが起こります。左右押しっぱなしだと上下が決まらない。
その奇妙なメカニズムを理解したいと思います。
java - マルチキー、リンクされたハッシュ
name (文字列、一意ではない) とid (整数、一意)の 2 つのプロパティを持つ一連の要素があります。同じ名前のすべての要素が一緒に保存され、いくつかの基準に従って並べ替えられます。
すべての要素が事前にわかっているため、挿入は 1 回で済むため、簡単に実行できます。削除は、順序 (最初のもの) または最終的に ID に従って行われます。値の読み取りは、最も一般的な (そして関連する) 操作です。
パフォーマンスは、データ構造の最大の要件です。マルチキー、リンクされたデータ構造、または混合ハッシュマップ/スタックが理想的だと思いましたが、そうではありません。私が検討したいくつかのオプションは次のとおりです。 - Guava テーブル (複数のキー) ですが、プッシュ/ポップの動作はありません。- LinkedHashMaps ですが、キーは 1 つしかありません。
もちろん、ID に基づいて要素を削除する必要がある場合は、LinkedHasMaps を使用して削除を繰り返すことができます。高性能ですでに実装されているものがあるかどうかを知りたいだけです。
助言がありますか?
みんなありがとう