- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
标准方法包括生成一个唯一的 ID(较小的整数,通常是一个自动递增的 ID),然后在双射函数中使用该 ID 来生成一个较小的字符串,如下所述: https://stackoverflow.com/a/742047/762747
但这种方法不适用于大规模的分布式系统。 NoSQL 数据库的 id 通常要大得多以确保唯一性。可以尝试生成自动递增 ID,但这肯定会很低效。
是否有任何其他方法来生成短 URL。具体来说:
1) twitter 如何生成 t.co URL,因为这是我们谈论规模时我能想到的最好的例子。推文 ID 大得多(他们使用雪花),所以我们可以说推特没有(而且可能不能)使用自动递增 ID。
2) 如果他们使用相同的方法,那么 URL 缩短是异步的,以确保他们在生成自动递增 ID 和短 URL 时不会影响性能吗?
至于我的具体情况,我试图从 mongo BSON id 生成一个唯一的缩短字符串。当我尝试缩短 BSON id 时,上述方法会产生一个 16 个字符的 base 62 字符串。我可以采用唯一的自动递增 id 路线,但由于显而易见的原因,这听起来效率很低。想法?如果 Twitter 可以做到,我们也可以。好人@twitter,你介意分享你的方法吗?
最佳答案
自增不是要求,要求是ID唯一。您只需将连续的 ID block 外包给每个发布新 ID 的服务器使用。这些服务器然后从 block 的开始自动递增到 block 的末尾。跨服务器锁定是在 ID block 级别而不是单个 ID 级别完成的。
您可以通过对数据库进行低优先级后台扫描来处理不可避免的 ID 差距,该数据库会收集 ID 中的差距,并将它们添加到要养殖的范围的“已知免费”列表中在发布新的 ID 范围之前退出。
无论是全局自增还是局部自增,理论上ID个数都是O(N)。这仅表明,有时算法复杂度并不能很好地衡量预期性能。
关于ruby-on-rails - URL 缩短器如何大规模工作(例如 t.co 在 Twitter 的情况下),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25041490/
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: How do short URLs services work? 我经常看到来自 bitly.com 的缩短
if (args.join(" ").toLowerCase() === "are you" || args.join(" ").toLowerCase() === "are you doing")
学习Golang,想知道是否有更短的编写方法 if tiletype == 0 || tiletype == 2 { levelmap[pass
sum_num = 0 for human in humans: sum_num += human.limbs return sum_num 假设对象 human 具有属性 limbs ,如下
我想问一下是否有一种方法可以像在 MSSQL 中那样缩短这个条件,因为我也有类似的条件。 if(docType == "PO" || docType == "II" || docType == "IA
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
我在单页上有一些 15-20 个 Highcharts (使用 slider ,每张幻灯片 1-2 个图表)、一些条形图、一些柱形图、一些饼图,具有不同的显示选项。我使用的是在我的闭包内有多种方法,其
几周前,我在下拉菜单的一些代码上得到了一些帮助,但我想知道是否可以使代码更短,因为下面显示的当前代码相当大,任何帮助都会很棒。 $(document).ready(function(){ $(
这里是新的。我只是想知道是否有可能使这个 if 语句更短且冗余更少。 if (!a && b) { if (c == d && e > 0) { return;
我有这个代码。 c = getch() if c == "r":
我有几行代码用于迭代列表中的字典,我想缩短它。它按原样完美运行,但似乎代码太多,我正在尝试了解如何在 Python 中(或一般情况下)保持代码高效。 for d in dev['devices']:
如果代码如下,如何缩短 if 语句? $a = null; $b = "foo"; if ((empty($a) && !empty($b)) || (!empty($a) && empty($b))
我需要计算应用的每日独立用户数。 我可以唯一识别用户的唯一方法是通过他们的 UUID(这是外部提供的,所以我不得不使用它)。 我知道我的每日用户数是几百万。 我想在 Redis 中使用一个 bitse
载体 a和 b可以使用 toString(width = 10) 缩短在 Base R 中导致以 .... 结尾的较短向量 但是,我想知道如何使缩短的向量以 ..., last vector elem
是否有缩短 HTML 页面的库(最好是 Python 库)?我的意思是它会生成一个可能更小的(就字符数而言,包括换行符 Silly example 可以改成: Silly example
如何缩短这段 CSS 的代码?当它在移动 View 中时,它将隐藏表格的某些列。我的表有 137 列,我只想查看 5 列。 @media only screen and (max-width: 800
我所拥有的是主目录中的文件路径,我希望将其处理为包含“~”的缩短路径。 例如,我的输入可能是:"/home/username/test"或 /home/./username/test或 /home/.
我们为文档生成一个 GUID,并且需要将该 GUID 包含在 C40 编码的条码(Type 29 2D)中,并且具有以下限制。 最长可达 25 个字符只能使用大写字母数字字符,不能使用特殊字符。 我曾
这个问题已经有答案了: Ternary operators in JavaScript without an "else" (13 个回答) 已关闭 4 年前。 我一直使用这样的三元表达式,但我不喜欢
首先,我想确保我知道这样一个事实:重新哈希是一个明智的话题。不过,我想听听您的一些意见,以及您会采取什么方法。 我正在构建一个分布式应用程序,其中节点远程创建由 UUID 标识的实体。最终,所有实体应
我是一名优秀的程序员,十分优秀!