Целое число идентификатора Django
Есть ли ограничение для AutoField в модели Django или в базе данных?
Проект Django, над которым я работаю, потенциально может увидеть множество объектов в определенных таблицах базы данных, которые за короткий промежуток времени будут превышать 40000.
Я использую Sqlite для Dev и Postgresql для производства.
3 ответа
Добавление новой информации для Django 2.x
:
Djangos AutoField
является IntegerField
, Документы для IntegerField
сказать:
Значения от
-2.147.483.648
в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.
Добавив это как ответ. Django сопоставляет это с последовательными столбцами, что означает, что максимальное значение находится в диапазоне 2 миллиардов (точнее, 2 147 483 647). Хотя это вряд ли является проблемой для большинства приложений, если вы это сделаете, вы можете вместо этого изменить тип на bigint, и это очень маловероятно, что вы когда-нибудь достигнете конца 64-битного int пространства.
Как другие уже упоминали, используете ли вы int
или же bigint
соответственно у вас есть 2.147.483.648
или же 9.223.372.036.854.775.808
ценности.
Если вы думаете, чтобы превысить эти цифры, вы можете сделать шардинг. Короче говоря, шардинг - это способ горизонтального разделения ваших данных путем хранения разных строк одной и той же таблицы в нескольких таблицах в нескольких базах данных.
Для Django доступно множество библиотек шардинга (например, django-sharding)