【发布时间】:2018-01-26 20:12:33
【问题描述】:
如何在 C# 中生成正长整数?
背景信息:我没有共享状态,并且正在将条目插入 dynamodb,它没有自动递增的主键。一个典型的模式是插入一个向导,检查冲突;根据桌子的占用情况,这是一个可行的解决方案。我想使用修改后的策略,而不是使用 guid(16 字节),我将使用正长整数(63 位)。
这是一个安全计划的理由:
我预计最终最多会使用总可用空间的千亿分之一 (1/10**8)。
2**63 == 9223372036854775808
如果我存储 100b 条记录,占用率为:
2**63/10**11 == 92233720 ~= 10**8
这意味着碰撞的机会大约是每亿次尝试。由于我在插入时检测到冲突,因此必须以该频率重试生成是可以接受的。
所以问题是:
如何在 C# 中生成随机正数?
【问题讨论】:
-
标准 id 约定意味着您应该让它由您的数据库生成...只是随机生成一个会导致插入查询失败,如果您不考虑这一点,可能会导致许多问题.. 那就是整个原因是所有数据库都有自动递增的 ID..
-
DynamoDB 不支持随机自动生成的 ID。我将在插入时检查重复项。此外,对于这个域来说,长空间就足够了。
-
问题是如何生成这样一个数字,它不是C#标准库内置的,并且有合理的商业用途。诸如“好吧,你不应该那样做”之类的评论是不相关的。
-
获取id字段,初始化为0,递增1
id++ -
@crunchy 我在数据库本身之外的所有客户端之间没有共享状态,因此无法协调。