Django 模型或数据库后端中的 AutoField 是否有限制?
我正在处理的 Django 项目可能会在某些数据库表中看到很多对象,这些对象在短时间内会超过 40000 个。
我将 Sqlite 用于开发,将 Postgresql 用于生产。
Django 模型或数据库后端中的 AutoField 是否有限制?
我正在处理的 Django 项目可能会在某些数据库表中看到很多对象,这些对象在短时间内会超过 40000 个。
我将 Sqlite 用于开发,将 Postgresql 用于生产。
添加此作为答案。Django 将其映射到串行列,这意味着最大值在 20 亿范围内(准确地说是 2,147,483,647)。虽然这对于大多数应用程序来说不太可能成为问题,但如果这样做,您可以将类型更改为 bigint,这将使您极不可能到达 64 位 int 空间的末尾。
添加新信息Django 2.x
:
DjangoAutoField
是一个IntegerField
. 文档IntegerField
说:
从
-2.147.483.648
to的值2.147.483.647
在 Django 支持的所有数据库中都是安全的。
AutoField
默认情况下仅使用正数,因此值可以从1
到2.147.483.647
。
由于Django 1.10
也有一个BigAutoField
,它与 非常相似BigIntegerField
。文档BigAutoField
说:
一个 64 位整数 [...],保证适合从
1
到的数字9.223.372.036.854.775.807
。
现在,文档并没有明确说明这个字段,但是通过使用单词is garanteed to fit
,我假设这适用于 Django 支持的所有数据库。
正如其他人提到的那样,您是否使用int
or bigint
,您分别拥有 2.147.483.648
or9.223.372.036.854.775.808
值。
如果您认为超过这些数字,您可以进行分片。简而言之,分片是一种通过将同一表的不同行存储在跨多个数据库的多个表中来对数据进行水平分区的一种方式。
Django 有许多可用的分片库(例如django-sharding)