2016-03-14 72 views
0

我第一次涉足DynamoDB(使用boto3),我不確定如何定義我的分區鍵。我習慣於SQL,在那裏你可以使用AUTO_INCREMENT來確保密鑰總是會增加。DynamoDB主鍵策略

我還沒有在DynamoDB中看到過這樣的選項 - 相反,當使用put_item時,「主鍵屬性是必需的」 - 我認爲這意味着我必須明確定義值(並且,如果我我得到botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the PutItem operation: One or more parameter values were invalid: Missing the key id in the item

如果已經有行ID爲1,2,3,... N,我自然希望我插入的下一行有主鍵N + 1。但我不知道如何產生這種結果 - 給出的解決方案here都不完美。

我應該獨立生成主鍵值,也許是通過散列項目的其他值?如果我這樣做,是不是有一個(小)散列碰撞的機會?然後再次,因爲DynamoDB似乎確定partition based on a hash of the Partition Key,是否有任何理由讓我不要簡單地使用隨機的足夠長的字符串?

回答

2

DynamoDb不支持生成的密鑰,您必須自己指定一個。您無法可靠地生成順序ID。

一種常見的方式是使用UUID。

+0

謝謝!所以,如果主鍵是一個基本上隨機的值,它的用途是什麼? DyanmoDB爲什麼不自己生成它 - 或者換句話說,它是如何讓我知道/提前確定一個項目的主鍵? – scubbo

+0

我認爲這是一個技術性的決定,因爲它是一個分佈式數據存儲。我現在只是在猜測,但是當數據被共享(分佈在多個實例中)時,確定連續序列中的下一個數字將成爲瓶頸。所有人都必須分享一個櫃檯。 – DanneJ

+0

我同意DanneJ。雖然,如果你堅持實施沒有瓶頸的順序系列,但是有一點延遲附錄,我建議你嘗試使用http://www.stateful.co/。這是一個開源的原子計數器服務。 – avivklas