2017-02-18 59 views
0

我正在使用AWS Mobile HUD和連接服務構建應用程序,最突出的是Cognito & DynamoDB。目前,我正面臨一個問題,需要設置一個允許我在DynamoDB項目上存儲用戶相關信息的方案(反之亦然)。AWS DynamoDB記住用戶的項目

方案

運行1

  1. 用戶A是直接從DynamoDB的[RootItem] = {RootItem_1, RootItem_2, RootItem_3}列表(檢查:正常工作)
  2. 用戶A或者駁回RootItem_1(標記爲 '不感興趣' in app)

運行2

  1. 用戶A登錄到應用程序
  2. 用戶A拉[RootItem] = {}
  3. 用戶A的列表應該只得到RootItems這是駁回交付給客戶
  4. 名單應該是{RootItem_2, RootItem_3}

作爲新的非關係數據/ NoSQL,我不是確定解決這個問題的最好方法是什麼。可能的思路:

  • 存儲用戶ID的RootItem_1排除它在掃描[問題:將有可能是成千上萬的用戶駁回同一項目] RootItem_1的
  • 商店UUID到用戶數據上cognito,緩存拉之前本地並排除uuid的拉
  • 創建具有排除/解除[userid,rootItem_uuid]的表,首先查詢以獲取用戶排除列表。 >潛在的性能問題?

這將是巨大的,得到一些建議的是在NoSQL的環境來處理這個最好的辦法。

+0

這是一個looong前我試過dynamodb,但你應該避免掃描操作,如果可能的話,這是非常沉重的。你看過全球二級指標嗎?這可能會減少對SCAN操作的需求,並允許您在表格上查詢。 http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForGSI.html – 2017-02-18 13:39:04

+0

我知道,掃描並不完美,問題是我必須做相當複雜的查詢,這似乎是不可能的使用查詢。 aka {property 1 == x &&屬性2 beween(a,b)或(c,d)&&屬性3 = a或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,這也是要注意的事情(不要嚇跑你)。 – 2017-02-18 16:45:34

回答

0

這當然取決於數量或RootItems,以及每個用戶有多少活動(未解僱)的RootItems。但我會保留一個RootItems列表(或引用它)並將其存儲在每個用戶的表中,並在用戶關閉這些項目時維護該列表。或者甚至有可能大部分項目都被解僱了,然後它會成爲用戶保存項目的列表?

+0

基本上,用戶可以看到未來所有符合其標準的項目列表。然後,他繼續完成所有這些任務,要麼解僱他們,要麼「回憶」他們。在一個完美的世界裏(成功的風險),可能會有〜1000+個rootItems符合用戶的標準。我傾向於這個解決方案,有一個額外的表,其中userID是關鍵,我存儲{userId,rootItemID,日期},並且可以定期清理'舊'已解僱的項目,因爲它們不再需要,因爲過去的數據對於應用程序。我會嘗試這樣設置它,看看它是否有效。 –

+0

它工作正常,如果它是最高性能的方式,它還不是100%。我選擇在DynamoDB上創建引用,在登錄時下載它們1次,然後保留本地引用並在本地執行過濾 –