首页 体育 教育 财经 社会 娱乐 军事 国内 科技 互联网 房产 国际 女人 汽车 游戏

东半球最接地气的短链接系统设计

2020-01-03

咱们为了缩短 id 的长度呢,一般能够这么做。因为咱们的短链接是由 a-z、A-Z 和 0-9 共 62 个字符能够挑选。因而,咱们能够将十进制的数字 id,转化为一个 62 进制的数,例如 201314 就能够转化为 Qn0。算法如下

private static final String BASE = 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ


public static String toBase62 {

StringBuilder sb = new StringBuilder;

do {

int i = ;

sb.append);

num /= 62;

} while .toString;

}

private static final String BASE = 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ


public static String toBase62 {

StringBuilder sb = new StringBuilder;

do {

int i = ;

sb.append);

num /= 62;

} while .toString;

}

别的,咱们需求引进一个大局发号器,一向回来大局自增的 ID。相当于,咱们的短链接体系先去恳求这个大局自增 ID,然后将大局自增 ID 转化为 62 进制的数,作为 key。

接下来,处理第二个问题!数据具有规则性的问题。究竟你转化为 62 进制后,仅仅处理了数据过长的问题,数据规则性问题仍是没处理。因而,咱们需求引进一个随机算法。

那么此刻,你的考虑点在于,你是否要根据 key 值,反推出大局 id 值!来选择不同的随机算法!

不期望反推出大局 ID 

OK,那就用一个洗牌算法,打乱算出的值。比方十进制的 201314 就能够转化为 Qn0。然后再运用洗牌算法,能够回来 n0Q、Q0n....其中之一。可是会有必定几率抵触,多洗几回就行。

期望反推出大局 ID 

OK,那就在得到 Qn0 这个数字后,将其转化为二进制数。然后在固定位,第五位,第十位...刺进一个随机值即可。至于怎么反推也很简单,你拿到短链接 key 后,将固定位的数字去除,再转化为十进制即可。

分库分表 

假如这个体系是放在公网,给我们运用的。主张上来就分库分表,数据量过 1000 万是很简单的。这儿涉及到一个问题,拿大局发号器给的自增 id 做分片健,仍是拿转化后的 key 做分片键。

明显,用转化后的 key 做分片键会更简单一些。假如用 ID 做为分片键,存在两个问题!

热门文章

随机推荐

推荐文章