代码之家  ›  专栏  ›  技术社区  ›  odinho - Velmont

姜戈拥有小农场的原因是什么?

  •  29
  • odinho - Velmont  · 技术社区  · 16 年前

    我想知道为什么要提供。该字段依赖于数据库,这是否会使其完全不可靠?

    我想把出生年份储存在一个模型里,有点像

    class Person(models.Model):
      name = models.CharField(max_length=256)
      born = models.IntegerField()
    

    当然,这需要很小的空间,它应该总是4个“字符”长,所以一个积极的小整数字段可能适合,但为什么我应该选择它而不是正常的整数字段?

    5 回复  |  直到 12 年前
        1
  •  29
  •   Todd Gardner    12 年前

    许多RDBMS上的性能在很大程度上取决于行大小。虽然“纯粹主义”方法可能会说应用程序应该完全独立于底层数据结构,但是在许多行中,像使用较小的整数这样的改进可能会使表的大小减少千兆字节,从而使表更适合内存,从而大大提高了性能。这是 RIEF部分 ABCs .

    我会用一个这样的小整数来表示一个表上的主键,它总是有100行,特别是当它作为一个外键存储在一个表中时,我希望它会变得非常大。虽然大小是实现定义的,但可以安全地假设它至少大于127。

        2
  •  13
  •   Anentropic    15 年前

    它不是 完全地 不可靠的。smallint是SQL标准的一部分,当然mysql和postgresql都有小整数类型,从-32768到+32767。

        3
  •  7
  •   Dave W. Smith    16 年前

    这是其中的一件事情,因为它是这样的。

    Django支持smallintegerfield,因为Django是在PostgreSQL上长大的,PostgreSQL支持smallint。posgresql文档说

    smallint类型通常仅在磁盘空间较高时使用。

    虽然现在看起来有点奇怪,当1TB磁盘可以在街角的商店里买到时,磁盘要小得多,每字节的成本要高得多,这并不是很久以前的事了。记忆也是如此。在索引中使用smallint(如果合适)意味着将更多的行索引装入RAM缓存,这意味着更好的性能。

        4
  •  2
  •   Ned Batchelder    16 年前

    如果要在数据库中节省空间,可以选择smallintegerfield。该值的限制取决于数据库,但这不会使其不可靠。这仅仅意味着你必须知道你使用的是什么数据库系统,并找出这个系统的限制。

        5
  •  -3
  •   viam0Zah    15 年前

    不考虑月和日的日期。选择 DateField 因此,享受德扬戈提供给你的一切力量。因为你储存出生的叶,这也允许你在未来简单地接受月和日。