创建" users.id_users"在DynamoDB和PHP上

时间:2016-03-10 15:10:55

标签: php amazon-dynamodb nosql

我正在研究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。

1 个答案:

答案 0 :(得分:1)

dynamodb中的方法是在客户端创建一个UUID,例如通过时间戳(而不是自动增量功能)

您还可以使用提供id的外部服务(通过使用全局动词上的锁定)

您可以在此处获取更多信息:

自动增量主键是否正常 https://forums.aws.amazon.com/thread.jspa?messageID=561190

How to make a UUID in DynamoDB?

https://www.quora.com/How-to-auto-increment-in-DynamoDB