我正在研究DynamoDB,但我不明白如何创建一个唯一用户的id foreach用户。在SQL中很简单,有一个int(AI)字段。 它是一个int值,因为每个用户的个人资料网址都是(非常常见的形式):
my-application-url/users/[:id_users]
ex. my-application-url/users/1/
我的旧save_users函数是:
public function save_users($users){
if($users->id == 0){
$this->tableGateway()->save($users);
}else{
$this->tableGateway()->update($users, 'id_users' => (int) $users->id);
}
}
我使用zend框架2.
我可以获得最后一个注册用户的ID并将其递增,但如果我有2个或更多个同时注册,我可以获得2个或更多相同用户的ID。
用户dynamodb表也很简单:
{
"id_users" Number: 1,
"firstname" String: "Alessandro",
"lastname" String: "Corradini",
"email" String: "my-email",
"password" String: "my-encrypted-password"
}
可能的解决方案
我需要在用户表中使用UUID字段。表格如下:
{
"UUID" String : <UUID-placeholder>,
"id_users" Number: 1,
"firstname" String: "Alessandro",
"lastname" String: "Corradini",
"email" String: "my-email",
"password" String: "my-encrypted-password"
}
对于id_users
标识符,也是唯一标识符,我将在下面使用此函数生成固定长度id_users
。在将用户保存到register.php
之前,我会检查表中是否存在(并且电子邮件也是!!),如果不存在,则保存用户,否则生成另一个唯一ID。
function randomId($length){
$result = mt_rand(1, 9);
for($i = 0; $i < ($length - 1); $i++) {
$result .= mt_rand(0, 9);
}
return $result;
}
对于16个字符的长度,我有10 ^ 16个组合。我认为这是enaugh。
答案 0 :(得分:1)
dynamodb中的方法是在客户端创建一个UUID,例如通过时间戳(而不是自动增量功能)
您还可以使用提供id的外部服务(通过使用全局动词上的锁定)
您可以在此处获取更多信息:
自动增量主键是否正常 https://forums.aws.amazon.com/thread.jspa?messageID=561190