以前は、ここにあるクラスを使用して、userIDをランダムな文字列に変換していました。
彼のブログから:
ランニング:
alphaID(9007199254740989);
'PpQXn7COf'を返します。
alphaID('PpQXn7COf', true);
'9007199254740989'を返します
つまり、ユーザーはwww.mysite.com/user/PpQXn7COfを実行でき、それを通常の整数に変換してmysqlで実行できるようにするという考えでした。
"Select * from Users where userID=".alphaID('PpQXn7COf', true)
今、私はカサンドラと仕事を始めたばかりで、いくつかの代替品を探しています。
- www.mysite.com/user/username1ではなくwww.mysite.com/user/PpQXn7COfのようなURLが必要です
- 「PpQXn7COf」uuidはできるだけ短くする必要があります。
ここで説明されているTwissandraの例:http ://www.rackspace.com/cloud/blog/2010/05/12/cassandra-by-example/
それらはいくつかの長いuuidを作成します(それはほぼ100%確実にランダムであるため、非常に長いと思います)。
mysqlでは、自動増加機能を備えたuserID列があったため、alphaID()関数を使用すると、常に非常に短いランダムな文字列が取得されました。
これを可能な限りクリーンに解決する方法を考えている人はいますか?
編集:
ソーシャルメディアサイトで使用されるため、永続的である必要があります。それはまた私がURLでユーザー名/実名を使用したくない理由です、彼らが必要な場合、ユーザーはグーグルで検出されないままにすることはできません。
簡単なアイデアが浮かびましたが、それがどれほどスケーラブルかわかりません。
<?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ユーザー/秒が登録している場合は混乱しませんか?