现在我知道bigint是2^64;也就是说,比已知宇宙中的原子还要多。我不应该担心,因为我的单纯人类大脑无法理解那个数值的巨大。
然而,假设我记录系统中每个类别、产品和订单的每一次更改,从启动到永久结束。我应该担心表写入的性能问题,还是应该担心主键值的耗尽?我是否应该将不同优先级的事件记录到不同的事件表中?我是否会在 bigint 耗尽之前用光硬盘上的原子?事件日志表应该在多大后开始归档/清理?
现在我知道bigint是2^64;也就是说,比已知宇宙中的原子还要多。我不应该担心,因为我的单纯人类大脑无法理解那个数值的巨大。
然而,假设我记录系统中每个类别、产品和订单的每一次更改,从启动到永久结束。我应该担心表写入的性能问题,还是应该担心主键值的耗尽?我是否应该将不同优先级的事件记录到不同的事件表中?我是否会在 bigint 耗尽之前用光硬盘上的原子?事件日志表应该在多大后开始归档/清理?
即使您的每个条目只有1个字节,2^64个条目也将占用约18000000 TB的硬盘空间,所以我想您不应该担心这个问题。
如果您的应用程序每一百万分之一秒增加一条记录,则在用完所有键之前,它将运行超过五十万年。
在我开始归档/清除事件日志表之前,我应该让它变得多大?
永远不要清除事件日志 - 这些信息具有重要价值。
然而,如果一些经理坚持档案是必要的,您可以展示存储成本与为(a)考虑、(b)获得第二和第三意见,然后(c)编写归档日志记录的程序所花费的时间成本。
存储成本正在暴跌。您的时间最好用于除了清理日志记录之外的任何事情。
底线是:你有权停止握手,这一切都很好,你没有犯任何根本性的错误。
很少有可能会用完主键值。但是,您可能需要考虑如何访问日志表以检索数据。使用此信息来确定何时应该归档或清理数据。如果经常读取日志数据,请考虑添加索引以提高读取性能,但请记住,需要为每个添加的记录维护索引。
我们处理这种情况的方式是提供日志归档功能,通过按照年份将日志表分开成独立的数据库,从而使我们能够在LogEvent表上重置identity seed。
我们也有不同的日志表,尽管只有两个主要的日志表。