从Mysql迁移到Cassandra

| 以前,我使用此处找到的类将userID转换为一些随机字符串。 从他的博客: 正在运行:
alphaID(9007199254740989);
将返回\'PpQXn7COf \'并且:
alphaID(\'PpQXn7COf\', true);
将返回\'9007199254740989 \' 因此,想法是用户可以执行www.mysite.com/user/PpQXn7COf,然后将其转换为普通整数,以便在mysql中进行操作
\"Select * from Users where userID=\".alphaID(\'PpQXn7COf\', true)
现在,我刚刚开始与Cassandra合作,我正在寻找替代产品。 我想要的网址像www.mysite.com/user/PpQXn7COf,而不像www.mysite.com/user/username1 \“ PpQXn7COf \” uuid必须尽可能短。 在以下说明的Twissandra示例中:http://www.rackspace.com/cloud/blog/2010/05/12/cassandra-by-example/ 他们会创建一些较长的uuid(我想这很长,因为那时它几乎100%确定了它的随机性)。 在mysql中,我只有一个userID列,它具有自动增加的功能,因此当我使用alphaID()函数时,我总是得到一个非常短的随机字符串。 有人知道如何解决这个问题吗? 编辑: 它用于社交媒体网站,因此必须具有持久性。 这也就是为什么我不想在网址中使用用户名/实名的原因,如果需要的话,用户无法保持Google未被检测到。 我只是有一个简单的想法,但是我不知道它的可扩展性
<?php
//createUUID() makes +- 14 char string with A-Z a-z 1-0 based on micro/milli/nanoseconds
while(get_count(createUUID()) > 0){//uuid  is unique
  //insert username pass, uuid etc into cassandra
  if($result == \"1\"){
      header(\'Location: http://www.mysite.com/usercenter\');
  }else{
      echo \"error\";
  }
}
?>
当这得到允许的大小时,说twitter / facebook: 它会在可接受的时间内执行吗? 它是否仍会足够快地生成唯一的uuid,因此如果10000个用户/秒正在注册,它不会变得混乱不堪?     
已邀请:
自动增量不适用于强大的分布式系统。如果系统中的每个节点都可用,则只能分配唯一的ID,以确保其唯一。 当然,您可以发明自己的唯一ID生成器,但是您必须确保它会在基础结构中的任何位置生成唯一ID。 例如,每个节点只能有一个文件(带有适当的锁定等)只是递增文件,但是您还需要确保它们不冲突-例如,通过在生成算法中包含服务器ID。 这在操作上可能并不简单-您的操作工程师将需要确保正确配置基础结构中的所有服务器,并设置自己的ID生成器,以便它们不会生成相同的ID。但是,这是可能的。 UUID是合理的选择,因为它们肯定是唯一的。 UUID是128位;如果我们每个字符存储6位(即base64),则需要22个字符,这是一个很长的URI。如果您希望将其缩短,则需要以其他方式生成唯一的ID。 加上这一切取决于您实际需要ID的“独特程度”。如果您的ID在几个月后可以安全地重用,那么您可以使用<60位(取决于基础结构中的服务器数量以及生成它们的频率)来实现。 我们用 服务器ID 时间(粒度= 2秒),但在几个月后会结束 每个服务器的计数器(频繁包装,但不超过2秒) 并将所有位粘贴在一起。这会生成一个<64位长的ID,但可以保证在需要的时间长度内是唯一的(在我们的情况下只有几个月) 如果发生以下情况,我们的算法将发生故障并生成重复的ID: 我们的节点之一上的系统时钟向后移了计数器包裹的相同时间。 我们的运营工程师犯了一个错误,并为两个服务器分配了相同的服务器ID。 最终,大约9个月后。     

要回复问题请先登录注册