Redian新闻
>
10包子求一个AF 25%的code
avatar
10包子求一个AF 25%的code# Fashion - 美丽时尚
t*u
1
要create一个tinyUrl一般的做法都是生成一个数字的ID,然后把这个数字转换成[0-9]
[a-z][A-Z]的shortUrl
问题是如何生成这个数字ID呢?可以维持一个counter每次create tinyUrl就加1。但是
这样的话怎样distribute create到很多server上?
求大神指点
avatar
t*a
2
Thanks!
avatar
z*8
3
timestamp + machine id + local counter + anything else appropriate
avatar
i*o
4
还要吗?还要的话,我就站内信给你. 2/11 - 2/22 有效的.
avatar
t*u
5

这样的话会是一个很长的id,怎样把它转成一个7-8个char的shortUrl呢?

【在 z*********8 的大作中提到】
: timestamp + machine id + local counter + anything else appropriate
avatar
d*y
6
我也有,要的话,站内信联系哦!
avatar
w*1
7
7-8个char组合起来数值很大的,62 base,这样做问题不大

【在 t*******u 的大作中提到】
:
: 这样的话会是一个很长的id,怎样把它转成一个7-8个char的shortUrl呢?

avatar
z*8
8
事实上这是个很常见的follow up: 对于1 billion requests, 以上每个segment大概
需要多少位数? 合并之后什么数据类型可以hold? 转化为62进制后需要几个字符?

【在 t*******u 的大作中提到】
:
: 这样的话会是一个很长的id,怎样把它转成一个7-8个char的shortUrl呢?

avatar
l*u
9
为什么是62 base啊? 大写26+小写26+数字10?
url一般都是case sensitive吧,比如这个网站上生成的tiny url,替换大小写也work
http://tinyurl.com/
avatar
t*u
10

1 billion request大概是10K rps,可以分到50个partition上,每个200rps
所以可以用3个digit来表示partition id。
timestamp大概10个digit。
这样的话就13个digit了,可以用string来hold。但是还没加local counter。
62进制8字符大概14digit,这样就没有local counter的空间了。
为什么一定要加time stamp呢?不能直接就partition id + local counter吗?

【在 z*********8 的大作中提到】
: 事实上这是个很常见的follow up: 对于1 billion requests, 以上每个segment大概
: 需要多少位数? 合并之后什么数据类型可以hold? 转化为62进制后需要几个字符?

avatar
z*8
11
timestamp, machine id, local counter都是数字, 为什么要用string来hold呢?
不能直接就partition id + local counter的原因: 因为机器或者local counter
process会crash, 所以local counter会reset, 从而返回同样的值

【在 t*******u 的大作中提到】
:
: 1 billion request大概是10K rps,可以分到50个partition上,每个200rps
: 所以可以用3个digit来表示partition id。
: timestamp大概10个digit。
: 这样的话就13个digit了,可以用string来hold。但是还没加local counter。
: 62进制8字符大概14digit,这样就没有local counter的空间了。
: 为什么一定要加time stamp呢?不能直接就partition id + local counter吗?

avatar
z*8
12
是case sensitive的, 所以大小写就有52种可能, 这是w3定义的: https://www.w3.
org/TR/WD-html40-970708/htmlweb.html

work

【在 l****u 的大作中提到】
: 为什么是62 base啊? 大写26+小写26+数字10?
: url一般都是case sensitive吧,比如这个网站上生成的tiny url,替换大小写也work
: http://tinyurl.com/

avatar
t*u
13

明白了
那这样的话就用long来hold。10个digit的timestamp + 3个digit的partition id +
local counter4个digit,一共17个,需要10个char的shorturl。这样算对吗?

【在 z*********8 的大作中提到】
: timestamp, machine id, local counter都是数字, 为什么要用string来hold呢?
: 不能直接就partition id + local counter的原因: 因为机器或者local counter
: process会crash, 所以local counter会reset, 从而返回同样的值

avatar
m*e
14

50年后的今天timestamp=1576800000,2进制31位即可表示
1. 如果tiny url只有6个字符,最多能表示56800235584种可能,2进制大概36位,用5
位表示partition id+local counter,貌似不充裕
2. 7个字符,2进制42位,除去timestamp还有11位,就是说每秒支持2046个url,差不多
3. 8个字符,2进制48位,除去timestamp还有17位,每秒支持131072,完全充足了

【在 t*******u 的大作中提到】
:
: 明白了
: 那这样的话就用long来hold。10个digit的timestamp + 3个digit的partition id +
: local counter4个digit,一共17个,需要10个char的shorturl。这样算对吗?

avatar
a*0
15
1 billion request和10k是什么关系?

【在 t*******u 的大作中提到】
:
: 明白了
: 那这样的话就用long来hold。10个digit的timestamp + 3个digit的partition id +
: local counter4个digit,一共17个,需要10个char的shorturl。这样算对吗?

avatar
y*g
16
多个server的话 在shorturl左边多加一位 用来标定server
long-》short 用一个hash%62来决定这一位 存在对应的server
short-》long 根据这一位找到对应的server做查询

9]

【在 t*******u 的大作中提到】
: 要create一个tinyUrl一般的做法都是生成一个数字的ID,然后把这个数字转换成[0-9]
: [a-z][A-Z]的shortUrl
: 问题是如何生成这个数字ID呢?可以维持一个counter每次create tinyUrl就加1。但是
: 这样的话怎样distribute create到很多server上?
: 求大神指点

avatar
j*3
18
现在不流行考这个了吧?
avatar
c*t
19
换成String才是short url啊
对timestamp不太明白,加上了timestamp以后,还怎么用tiny url search original
url呢?

【在 z*********8 的大作中提到】
: timestamp, machine id, local counter都是数字, 为什么要用string来hold呢?
: 不能直接就partition id + local counter的原因: 因为机器或者local counter
: process会crash, 所以local counter会reset, 从而返回同样的值

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。