我正在构建自己的分片解决方案。每个 ID 的构造如下:
- 分片 ID(小整数)
- 表类型 id(小整数)
- 增量数(大整数)
前任。00001000010000000015
我使用虚拟分片,所以我可以将所有分片指向一个服务器,当我需要更多容量时,我只需添加另一台服务器并将一些虚拟分片指向该服务器,这样下次数据就会写入新的server 而不是第一个,尽管 read 将转到两台服务器,至少在我移动数据并在配置文件中更改它之前。
我的问题是增量数字。我希望那些是独一无二的。在 mysql 中为特定表使用 build int incremental id 并不好,因为我可能会将数据移动到另一台服务器,并且我可能有另一个数据使用其表的增量编号,因此我可能会得到重复的 ID。
所以我的问题是如何以可扩展的方式生成唯一 ID,而不使用将生成该 ID 的外部表,因为它不会扩展。我可以指出 Pinterest 如何在这里解决这个问题,这可能会有所帮助。我考虑给每个表一个增量值,该值在每个分片的不同值处跳过,所以它们在所有分片上的增量值永远不会相同。
我的想法是使用 Amazon RDS 构建我自己的分片解决方案,因此副本已经存在,平衡很容易,因为我可以利用从服务器提升为主服务器的优势,只需删除两台服务器上的数据并更改我的分片配置文件。我认为可以使用 Amazon RDS 构建一个可以轻松扩展的解决方案,而且它比今天其他公司提供的要便宜得多(我已经在这方面做了功课)。
我不想在我的 URL 中使用 GUID。我不介意使用长数字。Pinterest、Tumblr、Facebook 和许多其他人不使用 Guid,所以我知道他们是一个解决方案,只是想知道你认为哪种解决方案最有效,考虑到我想使用数字 ID。
我正在用 ASP.NET C# 开发我的应用程序