【问题标题】:The limit of Int32 for Identity Column标识列的 Int32 限制
【发布时间】:2012-08-18 10:48:17
【问题描述】:

这只是对正在创建的网站和其他大型网站的考虑。

我正在使用标识列来存储我的一些表的 ID,并且我的类的 ID 用 Int32 装饰,以保存从数据库中检索到的 ID 的值。

我担心的是,随着网站变得越来越大,一些呈指数增长的表格,例如 QuestionComments 将来可能会超过 Int32 的限制。所以我改变我的班级使用long

public class Question
{
   public long QuestionID { get; set; }
   ...
}

//将数据库值转换为.Net类型

 Question q = new Question();
 q.QuestionID = Convert.ToInt32(myDataRow["QuestionID"]);

我的假设有多真实?使用 UniqueIdentifier 会更好吗?还有其他方法可以解决这个问题吗?

【问题讨论】:

    标签: c# .net sql-server identity-column type-conversion


    【解决方案1】:

    如果您真的认为拥有超过 20 亿个 cmets 是合理的,那么请在 SQL Server 中使用 BIGINT(在 .Net 中使用 Int64)。这需要 8 个字节的存储空间,而不是 INT 的 4 个字节,但是如果您使用数据压缩,您可以为前 2+十亿个值抵消这个。

    【讨论】:

    • 很荣幸得到您的答复。谢谢
    【解决方案2】:

    您能想象为任何一个实体存储数十亿条记录吗?如果是这样,您可以切换到BigInt,也称为Int64。当然,一旦您开始看到数百万条记录,您就需要开始考虑数据分区和归档以避免严重的性能问题。如果您有一个基础架构团队,您可能希望让他们知道您预计会大量使用并且需要一个认真的维护计划。如果您是基础架构团队,那么您最好按部就班!

    【讨论】:

    • 谢谢。我在 Programmer.SE 上发布了同样的问题并得到了更多解释。 Int32 实际上很大,有 20 亿 (2,147,483,647) 个唯一 ID。够了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2023-04-01
    • 2023-03-13
    • 2015-10-25
    相关资源
    最近更新 更多