2017-02-18 4 views
0

私はAWS Mobile HUDと接続サービスを使用してアプリケーションを構築しています。最も顕著なのはCognito & DynamoDBです。現在、私はDynamoDBアイテムにユーザー関連の情報を格納できるようにスキームを設定する問題に直面しています(またはその逆)。どちらか AWS DynamoDBはユーザーのための項目を記憶しています

  • ユーザーA '興味を持っていない' としてRootItem_1(マークを退け:Aが(正常に動作チェック)DynamoDBのから[RootItem] = {RootItem_1, RootItem_2, RootItem_3}のリストを引っ張る

    シナリオ

    ラン1

    1. ユーザーアプリ内)

    ラン2

    1. ユーザAがログインアプリケーションにAが[RootItem] = {}
    2. ユーザーAのリストのみをクライアントに配信されません却下
    3. 一覧は{RootItem_2, RootItem_3}あるべきあるRootItemsを取得する必要引っ張る
    4. ユーザー

    非リレーショナルデータ/ NoSQLを初めて使用しているため、私はそうではありませんこれに接近する最善の方法は何でしょうか。可能性のあるアイデア:

    • ストアユーザーID RootItem_1上のスキャン[問題:潜在的に同じ項目を却下何千人ものユーザーが存在します]でそれを除外する
    • プル前にローカルcognito、キャッシュ上のuserdataするRootItem_1のストアUUID uuidをプルから除外する
    • 除外/除外[userid、rootItem_uuid]でテーブルを作成し、これを最初にクエリしてユーザー除外リストを取得します。 >潜在的なパフォーマンスの問題?

    NoSQL環境でこれを処理する最良の方法は何かアドバイスを得ることは素晴らしいことです。

  • +0

    私はdynamodbを試しましたが、できるだけスキャン操作を避けるべきです。非常に重いです。あなたはグローバルセカンダリインデックスを調べましたか?これにより、SCAN操作の必要性が減り、代わりに表を照会できるようになります。 http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForGSI.html –

    +0

    私はスキャンが完璧ではないことを知っています。問題は、クエリを使用することが不可能な複雑なクエリを実行する必要があることです。 aka {property 1 == x && property 2 beween(a、b)or(c、d)&& property 3 = a or b、...}合計で6-7の範囲とマッチをフィルタリングしようとしていますプロパティは、ORとAND演算で、これまではクエリでこれは不可能だと思っています –

    +0

    これが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に直接接続していると想定しています。 –

    答えて

    0

    もちろん、番号またはRootItems、およびアクティブな(切断されていない)RootItemがユーザーごとにいくつ存在するかによって異なります。しかし、私はRootItemsのリストを維持し(またはそれを参照する)、各ユーザのテーブルに格納し、ユーザがアイテムを破棄するとそのリストを維持する。それとも、ほとんどのアイテムが却下される可能性がありますし、それはユーザーのために保存されたアイテムのリストですか?

    +0

    基本的に、ユーザは、自分の基準に合致する将来にあるすべてのアイテムのリストを見る。彼はその後、それらを却下するか「覚えている」かのいずれかを行って行く。完璧な世界(成功したベンチャー)では、ユーザーの基準に合った〜1000 + rootItemがあるでしょう。私はこのソリューションにも向いており、userIDがキーであり、{userId、rootItemID、date}のストアテーブルを追加し、過去のデータが面白くないので、アプリ。私はそれをこのように設定し、それが機能するかどうかを調べるようにします。 –

    +0

    うまく動作しますが、それが最も効果的な方法であれば100%ではありません。私はDynamoDBで参照を作成し、ログイン時に1回ダウンロードしてからローカル参照を保持し、ローカルでフィルタリングを行うことにしました –

    関連する問題