Redian新闻
>
15个包子或者$2求AMAZON的20%off coupon code
avatar
15个包子或者$2求AMAZON的20%off coupon code# NextGeneration - 我爱宝宝
H*5
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返回给用户。
avatar
u*a
2
谢谢大家!
avatar
m*l
3
小弟不才,试着回答...
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上找到数据。
avatar
H*5
4
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,无所谓
: 第二个问题:

avatar
m*l
5
多机全局自增的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

avatar
m*e
6
假设一个数据库,多个服务器:
数据库记录最大ID,每个服务器以一定步长增长ID,如果用完了就将数据库最大ID加上
步长。优点服务可以水平扩展,缺点服务宕机会产生空洞。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。