問題タブ [secondary-indexes]
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.
performance - Riak セカンダリ インデックス (2i) - 書き込みパフォーマンス
Riak に書き込まれたオブジェクトにセカンダリ インデックス (2i) を含めると、パフォーマンスにどのような影響がありますか?
1 つのバケット内に多数のオブジェクトがある 2 つのシナリオを考えてみましょう。各オブジェクトにはセカンダリ インデックスがあります。それを呼びましょうexample_bin
(ただし、整数インデックスの場合もあります)。
- のほぼすべての値
example_bin
は異なる値です。インデックスの 1 つの特定の値に対するクエリは、1 つまたは少数のオブジェクトのみを返します。このようなインデックスは、電子メール アドレスまたは登録時間 (UNIX タイムスタンプとして) である可能性があります。 example_int
indexの可能な値はいくつかしかありません。したがって、特定のインデックス値のクエリは、膨大な数のオブジェクトを返します。このようなインデックスは、「管理者」や「顧客」などのユーザーのカテゴリを表すことができます。
これらのオブジェクトを更新すると、パフォーマンスにどのような影響がありますか? オブジェクトが更新されるたびにインデックスをチェックする必要があることを理解しています。上記の例のいずれも、Riak にとって時間またはリソースを消費するタスクを構成できますか?
unique - 一意のセカンダリ/サード インデックスを持つ Dynamodb
すべて同じデータを含む 3 つの異なるテーブルを持つデータベースを再構築する準備をしています。違いは、それぞれの UserId、UserName、Email の HashKey です。冗長性が悪く、遅いと思うので、それらをすべて1つのテーブルに結合しようとしています。私が計画しているのは、HashKey として UserId を持ち、セカンダリ インデックスとして UserName と Email を持つことです。dynamoDb にセカンダリ インデックスの一意性を強制する方法が見つからないため、データベースに書き込む前にそれらの一意性をチェックする条件付き書き込みを使用することを計画します。SQL を使用すると、これは非常に簡単になります。DynamoDb でこれを行うためのより良い方法はありますか? 3 つの UserId、UserName、および Email のいずれかに基づいてユーザーを検索できる必要があります。これを 1 つのテーブルに保持し、Email から UserId または UserName から UserId を参照する別のテーブルを使用したくありません。
amazon-dynamodb - DynamoDBMapper を使用して hashKeys のみを持つ GSI を持つ Dynamo DB をクエリする方法
私はDynamo DBに非常に慣れていないので、これは非常に些細な質問かもしれませんが、Dynamo DB のドキュメントとスタック オーバーフローの質問を調べましたが、ハッシュ キーのみを持つGSIの DDB にクエリを実行する方法を示す単一のリンクが見つかりませんでした。同じものに指定された範囲キーはありません。
Illegal query expression: No hash key condition is found in the query という例外が発生します。
indexing - DynamoDB でスケーラブルな順序付けされていないコレクションを実装する方法は?
Amazon DynamoDB の上にオブジェクトのスケーラブルな順序付けされていないコレクションを実装することを検討しています。これまでのところ、次のオプションが検討されています。
DynamoDB ドキュメント データ型 (マップ、リスト) を使用し、ドキュメント パスを使用してスタンドアロン アイテムにアクセスします。これには、コレクションが 400KB のデータに制限されるという明らかな欠点が 1 つあります。つまり、サイズにもよりますが、おそらく 1..10K オブジェクトです。あまり目立たない欠点は、そのようなコレクションに新しいオブジェクトを挿入するコストが膨大になることです。Amazon は、新しく追加されたオブジェクトだけでなく、アイテムの合計サイズに基づいて書き込み容量が差し引かれることを指定しています。サイズ制限に近づくと 1KB オブジェクトを挿入します。それで、これが除外されたと考えると?
複合プライマリ ハッシュ + 範囲キーを使用します。ここで、プライマリ ハッシュはコレクション内のすべてのオブジェクトで同じままであり、範囲キーは単なるランダムまたはアトミック カウンターです。明らかな欠点は、同一のハッシュ キーを使用すると、キーの配布がうまくいかないことです。多数のオブジェクトを含むコレクションがある場合、カーディナリティが低くなります。これは、不適切なパーティショニングを意味し、同じコレクションのすべての読み取り/書き込みが 1 つのシャードにスタックされるというスケールの問題が発生し、DynamoDB パーティションの 1 秒あたり 3000 回の読み取り / 1000 回の書き込みの制限を受けることになります。
セカンダリ ハッシュ + レンジ キーでグローバル セカンダリ インデックスを使用します。ハッシュ キーは同じコレクションに属するすべてのオブジェクトで同じままであり、レンジ キーはランダムまたはアトミック カウンターです。上記と同様に、パーティショニングは GSI にとって不適切になり、同一のハッシュが多すぎるとボトルネックになり、プロビジョニングされたすべての容量がインデックスに急速に排出されます。GSI が正確にどのように実装されているかわかりませんでした。
問題は、私が (2) または (3) と一緒に暮らすことができ、理想的ではないキー配布に苦しむことができるかどうか、または見過ごされていたコレクションを実装する別の方法があるかどうか、またはおそらく別の nosql データベースエンジンを検討することを検討する必要があるかどうかです。
cassandra - カサンドラはセカンダリインデックスで行を検索し、nullを返します
次のようにTABLEとインデックスを作成しました
何百万回もデータを挿入または削除した後、次のクエリでデータを返すことができないことがわかりました。実際、データにはこの行があります。
PRIMARY KEYでクエリすると
データを返します:
しかし、セカンダリ インデックスでクエリを実行すると、null が返されます。
ありがとう
database - Apache Phoenix セカンダリ インデックス作成のしくみ
副次索引が Phoenix でどのように機能するか。Phoenix 挿入クエリではなく、HBASE への直接挿入によって更新される HBASE データベースのセットアップがあります。ただし、すべての選択は Phoenix 選択クエリを介して行われます。Phoenix セカンダリ インデックスは、これらの選択クエリで引き続き機能しますか?
amazon-dynamodb - 3 つの列をキーとして使用する DynamoDB Xcode6 Swift
DynamoDB テーブルを使用してこのデータを保存しようとしています。
ダーツプレーヤー侮辱テーブル
ここで説明されている方法 (コードではなく概念) を使用します。
ここ:
そしてここ:
顧客プレーヤーごとに複数の侮辱記録が必要です。CustomerId は私のハッシュ キー PlayerId は私の範囲キーであり、キーで PlayerInsult を使用して、2 番目の PlayerInsult 値が既存のレコードを置き換えるのではなく 2 番目のレコードを挿入しようとしています。
このためにグローバル インデックスとセカンダリ インデックスの両方を試しましたが、新しい侮辱を含む行を追加しようとすると、新しい侮辱を追加するのではなく、侮辱を同じ顧客プレーヤー キーに置き換えます。
これに使用する最善のアプローチについて何か提案はありますか? 範囲キーのハイブリッド列を作成する必要がありますか? これをシンプルにしようと...