簡體   English   中英

從Mysql遷移到Cassandra

[英]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合作,我正在尋找替代產品。

  1. 我想要的網址像www.mysite.com/user/PpQXn7COf,而不像www.mysite.com/user/username1
  2. “ 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:

  1. 它會在可接受的時間內執行嗎?
  2. 它是否仍會足夠快地生成唯一的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個月后。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM