生成int32&的唯一主要ID。 int64尺寸

时间:2011-03-05 05:00:08

标签: mysql sql nosql apache-zookeeper

我正在使用Java和分布式noSQL DB(Cassandra)开发社交Web应用程序。 我需要为应用程序中的新用户和帖子生成ID,大小分别为32位和64位。

由于构建在分布式平台之上,我们生成ID /密钥的问题变得更加复杂。虽然已经有像Zookeeper /或者twitter的雪花这样的解决方案,它们有助于减轻这种痛苦,但这些解决方案似乎并不简单。

从顶级视图看这些解决方案之后,我觉得最简单的解决方案和最成熟的解决方案。 使用MySQL数据库就像flickr的票务服务器一样,我首先想到的是它似乎是最简单的解决方案

  

http://code.flickr.com/blog/2010/02/08/ticket-servers-distributed-unique-primary-keys-on-the-cheap/

我知道会在分布式系统周围创建SPOF ..但我相信这对我早期最简单的解决方案(当时我的资金和人力资源较少)。当我的应用程序增长时,我相信切换并不困难,因为它们不需要传输大量数据。因此,对于我的应用程序的初期状态,我猜MySQL可以以最好和最简单的方式为我提供生成ID。

此选择的主要因素: -

  1.   Easier Implementation
  2.   Easy switching anytime in the future
  3.   Mature
  4.   MySQL may be required for our other needs as well, already 

我正在考虑最初使用单个MySQL服务器,然后切换到两个服务器作为flickr的解决方案,以便删除SPOF。

当我考虑转换为像zookeeper或雪花这样的替代解决方案时,有人会指出可能会出现什么问题吗?或者目前提出的方法的缺点可能是什么?

非常感谢你的时间!

1 个答案:

答案 0 :(得分:1)

  

我知道会在周围创造SPOF   分布式系统..但我还是   相信这将是最简单的   我早期的解决方案

不,最简单的解决方案是使用分布式dbms提供的标识符。这样就避免了

  • 用于MySQL的单独服务器硬件
  • 安装,配置和保护 另一个操作系统
  • 安装,配置和保护 另一个dbms

你可能需要顺序性比你想要的要少得多。

  

我知道会在周围创造SPOF   分布式系统。

它会产生多个单点故障。每个服务器硬件(除了可能是磁盘)都是单点故障的可能性很大。 (你要在那里安装多少个电源?有多少个磁盘控制器?有多少个NIC?)还有一大堆软件单点故障。