2016-09-13 116 views

回答

2

就檢索單個項目(您知道分區鍵(以及排序鍵,如果在表中使用該鍵)中)的效率而言,GetItem比查詢或掃描更高效。 BatchGetItem是一種方便的方法,用於檢索您知道分區/排序鍵的一堆項目,並且在節省網絡流量方面效率更高。

但是,如果您只有關於某個項目的部分信息,那麼您將無法使用GetItem/BatchGetItem,並且您必須對您關心的項目進行掃描或查詢。在這種情況下,查詢將比掃描更有效,因爲使用查詢,您已經將表空間縮小爲單個分區鍵值。 Filter表達式對效率沒有太多的貢獻,但它們可以爲您節省一些網絡流量。

當您需要檢索大量項目時,也有這種情況。如果您需要大量具有相同分區鍵的項目,則查詢會比多個GetItem(或BatchGetItem調用)更有效。此外,如果您需要檢索佔桌面重要部分的項目,則掃描是一條可行的路線。

+0

可能的副本你說過濾表達式對效率沒有太大的貢獻,但它們可以爲你節省一些網絡流量。我明白過濾後的結果會返回更少的數據,但實際過濾的性能如何?例如,如果多個IN運算符在作爲過濾器表達式的一部分的字符串集上執行?我無法找到關於這種模式效率的任何信息。乾杯 – theSiberman

+0

絕對如此。就網絡帶寬而言,假設過濾實際上很重要,您可以通過在服務器上而不是在客戶端上進行過濾來節省很多。而對於速度較慢的連接,效果更顯着。使用DynamoDB,您可以爲每個查詢檢索最多1MB的數據,這樣您可以根據經過篩選的結果集的稀疏性將每個查詢從幾千字節增加到整個兆字節。我不確定你指的是多少IN子句的效率。 –

+0

由於IN運算符在返回給客戶端之前應用於結果,因此開銷可以忽略不計。 –