有接入过 OAuth 的人应该都发现了, Google ID、Discord ID、Telegram ID 都是大整数,而且都和注册顺序没有直接关系(TGID 和注册顺序有一定关系,但不绝对)这些数据比大小没有意义,为什么不用字符串来存储?

9 天前
 drymonfidelia

大整数的兼容性更糟糕,像 TG ID 曾经就出现过因为超过了 int32 的最大值,大量 bot 、第三方客户端工作异常的事件。

4873 次点击
所在节点    程序员
44 条回复
alphaControler
9 天前
跟数据库存储,和索引查表有关
zmal
9 天前
op 是用 oracle 的?
nothingistrue
9 天前
第零,对外展示 ID ,跟其存储类型,没啥关系,超过 20 个长度的数字,它明显也得字符串存储。
第一,亿级数据量,性能考虑的比重很大。
第二,这些 ID ,并不是单纯的整数,往往都是同时兼顾离散性、顺序性、生成快速性的特殊序列。
NessajCN
9 天前
数字兼容性怎么可能比字符串更糟糕。数字你可以当它是个 int ,是个&[u8](两位两位取字节), 是个&[u8] (取 ascii ),字符串你只能存 &[u8] (ascii) 啊
cccer
9 天前
他数据库存的可能仍然是 16 进制的字符串,只是显示的时候转了 10 进制
drymonfidelia
9 天前
@NessajCN 很多编程语言 像 C++,在存储和操作大整数方面没有字符串友好、简单
QAZXCDSWE
9 天前
给你机会自辨真伪还说没意义?
NessajCN
9 天前
@drymonfidelia 那你当它是大整数来操作不就好了?
NessajCN
9 天前
@NessajCN
@drymonfidelia 更正:那你当它是字符串来操作不就好了
drymonfidelia
9 天前
@QAZXCDSWE 什么意思?
drymonfidelia
9 天前
@NessajCN 像 C++这种语言,这么大的数转字符串都不方便
635925926
9 天前
什么是大整数,手机号是大整数吗?
qping
9 天前
第三方的 ID 即使是个数字也要当字符串处理吧,万一那天它在数字后面加个字母呢
drymonfidelia
9 天前
@qping 但是他们返回的 JSON 里都是用 int 表示,而不是字符串
@635925926 超过 Int32 最大值的数
像 discordId 就是 18 位的
Fikar
9 天前
InkStone
9 天前
@drymonfidelia 不方便在哪里?不管多少位的大整数,转字符串也就一两行代码的函数的事情啊。又不是让你去做大整数运算。
NessajCN
9 天前
@drymonfidelia 我懂了,你主要是来 diss C++ 而不是来 diss 大整数的....
june4
9 天前
@drymonfidelia 难道 c++没有原生 64 位整数?
nothingistrue
9 天前
@drymonfidelia #11 囧,搞了半天,你所说的大整数,只是 32-64 之间的整数。这在 Java 、.NET 等大多数语言中,早就是常态整数了。而编程语言之外的东西,除了 Mysql 这个用 Java 当底层的,压根就不关心你是 32 位还是 64 位,甚至是不是整数都不不安心,像 Oracle 和 json 就只有 number 。

至于兼容性,这要遵循最大适应性原则和协商原则,现在更明显的是,你这个接受不了 int64 的 C++跑偏了。
pkoukk
9 天前
和索引有关,整型索引性能问题相对较少。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1051030

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX