2011-03-05 120 views
2

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

由于建立在分布式平台之上,所以我们生成id/keys的问题变得稍微复杂一些。虽然已经有像Zookeeper /或twitter的雪花这样的解决方案可以帮助缓解这种痛苦,但这些解决方案似乎并不简单。

从顶层视图看这些解决方案后,我觉得要用最简单的解决方案和最成熟的解决方案。 像flickr票务服务器一样使用MySQL数据库,我认为它是第一选择,因为它似乎是最简单的解决方案

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

我知道,这将创建一个围绕一个分布式系统SPOF ..但我依然相信这将是我早年最简单的解决方案(当我在资金方面有更少的资源和人力)。当我的应用程序增长时,我认为切换并不困难,因为它们不会传输大量数据。所以对于我的应用程序的初期状态,我猜MySQL可以以最好最简单的方式为我生成Ids。

这样选择的主要因素: -

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或snowflake这样的替代解决方案时可能会出现什么问题吗?或者当前提出的方法可能存在什么缺点?

非常感谢您的时间!

+0

您可以使用UUID。 – 2011-03-05 05:06:15

+0

我想保持我的ID为32位和64位的大小只有 – 2011-03-05 05:20:06

+0

,也希望某种排序 – 2011-03-05 05:20:34

回答

1

我知道这将创建一个周围分布 系统SPOF ..但我依然相信 这将是我早年

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

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

而且你可能需要的顺序性比你大很多想要吧。

我知道将围绕 分布式系统创建SPOF。

它会创建多个单点故障。每个服务器硬件(可能除了磁盘)都是单点故障的可能性很大。 (你打算放入多少电源?有多少个磁盘控制器?有多少个NIC?)还有一大批软件单点故障。

+0

我会更喜欢,因为有任何这样的设施由我的DBMS(卡桑德拉)提供,但不幸的是没有。其他cassandra用户或者依赖于像雪花一样的其他解决方案,如flicr票务服务器或uuids。我想避免uuids,因为它们太大,我的db将严重非规范化并需要缓存。 – 2011-03-18 02:30:41

+0

但我从来都不想要完美的顺序性,我只是想要它,这样我的i32 ID不会太早完成 – 2011-03-18 02:33:39

+0

@Marcos:你预计每天会使用多少个ID? – 2011-03-18 08:28:02