問題描述:該應用程式提供了可以以某種價格購買的產品串列,我希望客戶能夠通過或過濾所有專案asking-priceestimated-value
樣本屬性:(asking-price, posted-by, product-id, estimated-value, status.
狀態可用或已售)
樣本資料:
$10.00, [email protected], 1234, $12.00
我想到了使用方法1:
- 一個
product-id作為磁區鍵和asking-price排序鍵的 GSI - 一個
product-id作為磁區鍵和estimated-value排序鍵的 GSI
但問題是我們不知道磁區鍵,因為我們正在查看所有專案。
我也認為方法2:
- 一個
status作為磁區鍵和asking-price排序鍵的 GSI - 一個
status作為磁區鍵和estimated-value排序鍵的 GSI
但問題是產品不再是獨一無二的
最后,我嘗試了方法3:
- 一個
status作為磁區鍵和asking-price#product-id排序鍵的 GSI - 一個
status作為磁區鍵和estimated-value#product-id排序鍵的 GSI
但這里的問題是大于/小于條件不會回傳準確的結果,因為排序鍵現在是一個字串
似乎剩下的唯一答案是將 SCANS 與過濾器運算式一起使用,但是我擔心在應用程式的關鍵路徑中具有 SCAN 功能的成本。有沒有辦法解決?如果沒有,您會推薦使用限制、最大專案或并行掃描來提高性能嗎?我應該去關系資料庫嗎?
uj5u.com熱心網友回復:
您的 GSI 方法 2 將起作用,GSI 中的專案不需要是唯一的。
您唯一需要注意的是使用低基數鍵(狀態)。這將限制您桌子上的吞吐量。每個狀態的上限基本上是 1000 WCU 和 3000 RCU,因為這是單個磁區的限制。
如果您需要更多的吞吐量,那么我建議您使用亂數 0-N 作為磁區鍵。如果您需要以每秒 10k WCU 的速度寫入,則對 GSI PK 使用亂數 0-9。當您需要閱讀時,只需為每個鍵運行 10 個并行查詢。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/513382.html
標籤:数据库亚马逊网络服务nosql亚马逊-dynamodb
下一篇:在Lambda中使用多個函式
