Nosql
NoSQL:從 DynamoDB 表中獲取最新項目
我目前正在使用 dynamoDB 實現聊天伺服器。
這是 ChatData 表中的鍵
- 主分區鍵:roomNo
- 主排序鍵:seq
聊天伺服器,可以創建多個即時房間,每天大約100~120個。所以我選擇了主分區鍵作為房間號(roomNo),並在seq上按數據創建時間(或順序值)排序。
我想自動增加 seq,但是,我知道 DynamoDB 不支持
auto_increment
oridentity
。所以,我將嘗試使用Timestamp
或AtomicLong
從我的客戶端應用程序(JAVA 1.8)。但是,每個都有問題。首先,
Timestamp
, 可能會在表中插入重複值。並且
AtomicLong
,可以增加原子值,但是當我重新啟動我的應用程序時,它又從 1 開始。也許如果我可以
seq
從 DynamoDB 中獲得最大價值,我應該使用什麼?或者如何改變桌子上的鑰匙?
我認為您在正確的軌道上使用
AtomicLong
,但是每次您的應用程序開始確定要從哪個值開始時,您都必須執行掃描操作。您需要對此進行測試以確保它不會過多地降低性能。另一種選擇是元數據項。您可以為此創建一個額外的表,或者您可以使用一個永遠不會存在的雜湊屬性值將一個項目添加到您現有的表中(因此它不會與您的應用程序衝突,並且可以使用其眾所周知的輕鬆檢索價值)。儲存您的應用程序需要了解的名稱/值對(例如
lastSeq
),並根據需要使用條件寫入來更改它(例如,增量lastSeq
但僅噹噹前值為 時234
)。如果客戶端應用程序有多個實例,您將需要考慮爭用以及這可能會如何影響事情;使用條件寫入應該可以緩解這種情況(但您需要在每次創建項目時查詢和更新元數據項目)。
您可以在 AWS DynamoDB 開發人員指南中閱讀有關條件寫入的更多資訊。