H**********5 发帖数: 2012 | 1 tiny URL 在多machine/Server环境下,如果多个用户同时insert the same URL。如何
处理?谢谢。
另外想确认一下:以下我这么做是否正确可行?
单机情况下是一个global_unique ID自增,多机情况下,共享global_unique ID将不再
使用, How could multiple machines share a global auto_increment_id?。将系统
所有的server做
consistant hash.
每来一个long url,hash(long url)%62,放到合适的某个server中,在那个server产生
short url.
每来一个short url,拿到第一个byte,根据第一个byte获得某个server,在那个server上
获得Long url返回给用户。 |
m********l 发帖数: 791 | 2 小弟不才,试着回答...
tiny URL 在多machine/Server环境下,如果多个用户同时insert the same URL。如何
处理?谢谢。
不需要特殊处理,来一个long_url就给一个short_url去对应。一个长url对应多个短
url不会对系统和用户造成什么影响
比如两个用户同时insert www.mitbbs.com,生成的url如下:
abcdef -> www.mitbbs.com
123456 -> www.mitbbs.com
两个短url都指向www.mitbbs.com,无所谓
第二个问题:
1.感觉用不用自增ID和做不做consistent hashing没有关系,你用了自增ID也可以用
consistent hashing
2.你的做法可行,无非就是把数据存两份,一个是short2long的mapping,一个是
long2short的mapping。为什么是两份?因为你的mapping方式不能保证long_url和
short_url都在一台server上。
还有另外两个办法:
1) 只存short2long的mapping,来一个long就生成一个short,不管这个long是否已经
存在了。因为tinyurl这个系统存储不会是瓶颈。这跟我第一个问题的回答有关。
2) 只存一份数据。把sharding key做成"K"jbdc6u的形式, 其中"K"是hash(long_url)%
62的62进制数,后6位是short_url。这样你的sharding key就既包含了long_url的信息
,也包含了short_url的信息。这样不管你通过long_url还是short_url都可以在同一台
server上找到数据。 |
H**********5 发帖数: 2012 | 3 many thanks ,
有个地方我没表述清楚,修正为:多机情况下,为了避免多机共享global_unique ID可
能发生冲突。所以放弃了global_unique ID
consistent hashing
【在 m********l 的大作中提到】 : 小弟不才,试着回答... : tiny URL 在多machine/Server环境下,如果多个用户同时insert the same URL。如何 : 处理?谢谢。 : 不需要特殊处理,来一个long_url就给一个short_url去对应。一个长url对应多个短 : url不会对系统和用户造成什么影响 : 比如两个用户同时insert www.mitbbs.com,生成的url如下: : abcdef -> www.mitbbs.com : 123456 -> www.mitbbs.com : 两个短url都指向www.mitbbs.com,无所谓 : 第二个问题:
|
m********l 发帖数: 791 | 4 多机全局自增的ID是个难题,但是很多系统不可避免要做。比如instagram的photo要ID
,twitter的tweets要ID等等。
首先ID不能重复,其次有些系统要求ID还最好带有timestamp的信息,这样不需要其他
信息,单靠ID就可以sort something by time
建议你看看这篇文章,里面提到了Instagram, Twitter, Flickr如何做自增ID
https://engineering.instagram.com/sharding-ids-at-instagram-1cf5a71e5a5c
【在 H**********5 的大作中提到】 : many thanks , : 有个地方我没表述清楚,修正为:多机情况下,为了避免多机共享global_unique ID可 : 能发生冲突。所以放弃了global_unique ID : consistent hashing
|
m******e 发帖数: 82 | 5 假设一个数据库,多个服务器:
数据库记录最大ID,每个服务器以一定步长增长ID,如果用完了就将数据库最大ID加上
步长。优点服务可以水平扩展,缺点服务宕机会产生空洞。 |