2016-08-12 82 views
0

背景: 我們正在將文件存儲在AWS S3(主要是圖像)上。在我們的客戶端應用程序中,需要將一批文件上傳到s3(500多個文件),並且在上傳文件之前,我們總是通過用文件ID對S3進行ping操作來查看這些文件是否存在於S3中,並查看是否存在標題通過一個(假設沒有其他方法來檢查客戶端是否存在文件)。這顯然是客戶端應用程序中的性能下降。在雲中執行查詢「In」選項NoSQL類型數據庫

我們的嘗試: 在AWS上,我們創建了一個存儲在DynamoDB(雲數據庫)上的索引表,該表保留跟蹤當前存在的S3存儲桶的所有文件名(假定文件名對每個文件都是唯一的)使用lambda插入和刪除文件插入和刪除的記錄)。我們想要做的是,在從客戶端上傳文件之前,我們希望針對雲數據庫運行查詢/掃描,並檢查被跟蹤記錄中是否存在文件名列表。注意:我們不希望逐個檢查文件名的存在是非常重要的,因爲與我們現有的解決方案相比,它不會有太大改進。我們想檢查文件名列表,如果它們存在於數據庫中。 (就像在兩個文件名列表中做一個區分)

挑戰: 對於NoSQL數據庫,不可能在列表中執行查詢記錄。

我想獲得更多關於如何實現我們想要做的想法。

有一些,我們目前正在思考的選項:1。 而是使用的NoSQL數據庫中,我們使用關係數據庫,使我們可以在列表中做表聯合或查詢文件名 2.而不是死死的列表NoSql DB上的文件名,我們在不同的單元格上保留散列結果,並將散列結果檢索到客戶端集合,然後客戶端將進行列表比較。

回答

0

我的英文不好,我的理解是: 你想要檢查文件名的列表,如果它們存在,文件名是db hashkey。

您可以使用batchLoad得到results.But要小心,batckLoad API有數量限制。

0

如果您的DynamoDB表的大小小,你可以做一個掃描操作,並設置過濾器表達式與文件名"IN" operator

0

您可能還想考慮使用Elasticache,以使您的解決方案更具可擴展性,而不是爲每個請求都打印DynamoDB。並且,您可以擁有2個lambda函數,一個用於在S3存儲桶更新時更新DynamoDB,另一個用基於DynamoDB流的DynamoDB更新更新Elasticache。一旦更新緩存,在S3之前的後續查找將找到最新的更新。在這種方法中要記住的幾點是 - 異步更新和最終一致性。所以,你可能不得不看你的客戶如何處理它。