从 Mysql 迁移到 Cassandra
Posted
技术标签:
【中文标题】从 Mysql 迁移到 Cassandra【英文标题】:Migrating from Mysql to Cassandra 【发布时间】:2011-04-16 11:47:59 【问题描述】:以前我使用找到的类here 将用户ID 转换为一些随机字符串。
来自他的博客:
跑步:
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() 函数时,我总是得到一个非常短的随机字符串。
有人知道如何尽可能干净地解决这个问题吗?
编辑:
它用于社交媒体网站,因此它必须是持久的。 这也是我不想在 url 中使用用户名/实名的原因,如果用户需要,他们不能保持 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 个用户/秒正在注册它不会造成混乱?
【问题讨论】:
【参考方案1】:自动增量不适用于健壮的分布式系统。只有当系统中的每个节点都可用时,您才能分配唯一 ID,以确保它是唯一的。
您当然可以发明自己的唯一 ID 生成器,但您必须确保它会在您的基础架构中的任何位置生成唯一 ID。
例如,每个节点可以只有一个文件,它(具有适当的锁定等)只是递增,但您还需要确保它们不会冲突 - 例如,通过将服务器 ID 包含在生成中算法。
这在操作上可能很重要 - 您的操作工程师需要确保基础架构中的所有服务器都正确配置并设置了自己的 ID 生成器,这样它们就不会生成相同的 ID。但是,这是可能的。
UUID 是合理的选择,因为它们肯定是唯一的。
UUID 是 128 位;如果我们每个字符存储 6 位(即 base64),则需要 22 个字符,这是一个相当长的 URI。如果您希望它更短,则需要以不同的方式生成唯一 ID。
另外,这一切都取决于您实际需要的 ID 的“独特性”。如果您的 ID 可以在几个月后安全地重复使用,那么您可能可以在
我们使用
服务器 ID 时间(粒度 = 2 秒),但几个月后结束 每个服务器的计数器(频繁回绕,但不会在 2 秒内)把所有的部分粘在一起。这会生成一个
如果出现以下情况,我们的算法将出现故障并生成重复的 ID:
我们的一个节点上的系统时钟倒退的时间与计数器回绕的时间相同。 我们的运维工程师犯了一个错误,将相同的服务器 ID 分配给了两台服务器。 最终,大约 9 个月后。【讨论】:
感谢您的精彩回答!但是,您认为我在第一篇文章中的简单版本(查看编辑)也可以吗?这样实现起来会简单得多。以上是关于从 Mysql 迁移到 Cassandra的主要内容,如果未能解决你的问题,请参考以下文章
从 mysql 迁移到 oracle 命中 ora-01400
从 MySQL 到 SQL Server 的 Hibernate + Spring 迁移