【问题标题】:Generating unique primary Ids of int32 & int64 sizes生成 int32 和 int64 大小的唯一主 ID
【发布时间】:2011-03-05 05:00:07
【问题描述】:

我正在使用 Java 和分布式 noSQL DB(Cassandra) 开发一个社交网络应用程序。 我需要为应用程序上的新用户和帖子分别生成 32 位和 64 位大小的 id。

由于构建在分布式平台之上,我们生成 ids/keys 的问题变得有些复杂。尽管已经出现了诸如 Zookeeper/ 或 twitter 的雪花之类的解决方案,它们一直在努力减轻这种痛苦,但这些解决方案似乎并不容易使用。

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

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 或雪花等替代解决方案时,有人能指出以后可能会出现什么问题吗?或者当前提议的方法可能有哪些缺点?

非常感谢您的宝贵时间!

【问题讨论】:

  • 我想将我的 id 保持在 32 位和 64 位的大小
  • 并且还想要某种顺序性
  • 您实施了这种方法吗?如果是这样,回顾过去是否是一个好的决定?知道会很有趣 - 我也有类似的情况

标签: mysql sql nosql apache-zookeeper


【解决方案1】:

我知道这会围绕一个 分布式系统..但我仍然 相信这将是最简单的 我早期的解决方案

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

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

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

我知道这会围绕一个 分布式系统。

它将产生多个单点故障。很可能每个服务器硬件,除了磁盘,都是单点故障。 (您要在其中放置多少个电源?多少个磁盘控制器?多少个 NIC?)还有大量的软件单点故障。

【讨论】:

  • 如果我的 dbms(Cassandra) 提供了任何这样的设施,我会更愿意,但不幸的是没有。其他 cassandra 用户要么依赖于其他解决方案,如雪花,如 flicr 票务服务器或 uuids。我想避免使用 uuid,因为它们太大了,而且我的数据库将被严重非规范化并需要缓存。
  • 但我从不想要完美的顺序性,我只是想要它,以便我的 i32 id 不会过早完成
猜你喜欢
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 2010-11-17
  • 2015-09-25
  • 1970-01-01
相关资源
最近更新 更多