我正在学习DynamoDB,但我不明白如何才能创建一个唯一的用户的id foreach用户。在SQL是简单的,有一个int (AI)字段。它将是一个int值,因为每个用户的配置文件url类似于(非常常见的形式):
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字段到users表中。这张桌子就像:
{
"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组合。我觉得这很不错。
发布于 2016-03-10 15:23:17
dynamodb的方法是在客户端创建一个UUID,例如通过时间戳(而不是自动增量特性)。
还可以使用为您提供id的外部服务(通过使用全局谓词上的锁)。
您可以在这里获得更多信息:
是自动递增的主键,好的,https://forums.aws.amazon.com/thread.jspa?messageID=561190
https://stackoverflow.com/questions/35920297
复制相似问题