私はAWS Mobile HUDと接続サービスを使用してアプリケーションを構築しています。最も顕著なのはCognito & DynamoDBです。現在、私はDynamoDBアイテムにユーザー関連の情報を格納できるようにスキームを設定する問題に直面しています(またはその逆)。どちらか AWS DynamoDBはユーザーのための項目を記憶しています
RootItem_1
(マークを退け:Aが(正常に動作チェック)DynamoDBのから[RootItem] = {RootItem_1, RootItem_2, RootItem_3}
のリストを引っ張る シナリオ
ラン1
- ユーザーアプリ内)
ラン2
- ユーザAがログインアプリケーションにAが
[RootItem] = {}
- ユーザーAのリストのみをクライアントに配信されません却下
- 一覧は
{RootItem_2, RootItem_3}
あるべきあるRootItems
を取得する必要引っ張る - ユーザー
非リレーショナルデータ/ NoSQLを初めて使用しているため、私はそうではありませんこれに接近する最善の方法は何でしょうか。可能性のあるアイデア:
- ストアユーザーID RootItem_1上のスキャン[問題:潜在的に同じ項目を却下何千人ものユーザーが存在します]でそれを除外する
- プル前にローカルcognito、キャッシュ上のuserdataするRootItem_1のストアUUID uuidをプルから除外する
- 除外/除外[userid、rootItem_uuid]でテーブルを作成し、これを最初にクエリしてユーザー除外リストを取得します。 >潜在的なパフォーマンスの問題?
NoSQL環境でこれを処理する最良の方法は何かアドバイスを得ることは素晴らしいことです。
私はdynamodbを試しましたが、できるだけスキャン操作を避けるべきです。非常に重いです。あなたはグローバルセカンダリインデックスを調べましたか?これにより、SCAN操作の必要性が減り、代わりに表を照会できるようになります。 http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForGSI.html –
私はスキャンが完璧ではないことを知っています。問題は、クエリを使用することが不可能な複雑なクエリを実行する必要があることです。 aka {property 1 == x && property 2 beween(a、b)or(c、d)&& property 3 = a or b、...}合計で6-7の範囲とマッチをフィルタリングしようとしていますプロパティは、ORとAND演算で、これまではクエリでこれは不可能だと思っています –
これがDynamoDBから移動した理由です。「先進的な」クエリーを行う必要がないときは優れていますが、さらに条件が必要なときは壁に乗ります。それと、これと一緒に:http://stackoverflow.com/questions/41520123/getting-full-access-to-dynamodb-from-my-ios-app-using-aws-cognito-developer-iden/41676547#41676547私の答えをチェックしてください。 CognitoとiOSを使用しているので、私はあなたがDynamoDBに直接接続していると想定しています。 –