[英]Migrating from Mysql to Cassandra
以前,我使用此處找到的類將userID轉換為一些隨機字符串。
從他的博客:
運行:
alphaID(9007199254740989);
將返回“ PpQXn7COf”,並:
alphaID('PpQXn7COf', true);
將返回“ 9007199254740989”
因此,想法是用戶可以執行www.mysite.com/user/PpQXn7COf,然后將其轉換為普通整數,以便在mysql中進行操作
"Select * from Users where userID=".alphaID('PpQXn7COf', true)
現在,我剛剛開始與Cassandra合作,我正在尋找替代產品。
在以下說明的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:
自動增量不適用於強大的分布式系統。 如果系統中的每個節點都可用,則只能分配唯一的ID,以確保其唯一。
當然,您可以發明自己的唯一ID生成器,但是您必須確保它會在基礎結構中的任何位置生成唯一ID。
例如,每個節點只能有一個文件(帶有適當的鎖定等)只是增加一個文件,但是您還需要確保它們不會沖突-例如,通過將服務器ID包含在生成算法中。
這在操作上可能並不簡單-您的操作工程師將需要確保正確配置基礎結構中的所有服務器,並設置自己的ID生成器,以使它們不會生成相同的ID。 但是,有可能。
UUID是合理的選擇,因為它們肯定是唯一的。
UUID是128位; 如果我們每個字符存儲6位(即base64),則需要22個字符,這是一個很長的URI。 如果您希望將其縮短,則需要以其他方式生成唯一的ID。
加上這一切取決於您實際需要ID的“獨特程度”。 如果您的ID在幾個月后可以安全地重用,那么您可以使用<60位(取決於基礎結構中的服務器數量以及生成它們的頻率)來實現。
我們用
並將所有位粘貼在一起。 這會生成一個<64位長的ID,但可以保證在需要的時間長度內是唯一的(在我們的情況下只有幾個月)
如果發生以下情況,我們的算法將發生故障並生成重復的ID:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.