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

191 天前
 drymonfidelia

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

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

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

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

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

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

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

© 2021 V2EX