在核心数据中选择整数类型
Choosing an integer type in core data
当我在核心数据中创建模型时,我总是对应该选择哪种整数类型感到困惑——16、32、64。我几乎总是需要一些简单的基本数字:计数家庭中的人,对于我目前的情况。可能是 1-20 之间的数字。或者,我在另一个实例中有一个递增的案例 ID 号……无法想象会超过几百人。
事情是这样的...很明显,真正的计算机科学人士对数字有不同的看法,考虑到诸如将要处理数字的架构、处理和存储所需的 space 等因素数据、向后兼容性、未来证明等。当我想到数字时,我基本上想到的是一个值有多大。因此,当我必须在三种类型的整数之间进行选择时,我基本上对自己说,"Well, this is going to be a small number, let's just use the Int 16 option..." 或 "Shoot, I could end up with a really big number here so let's use the Int 64 choice." 基本上,我选择这些具有相同排序的数据类型我在点薯条时使用的逻辑……如果我真的很饿,我会选择大份的,如果我感到内疚,我就会选择小份的。
我学到的东西足以让我知道我没有以正确的方式考虑这个问题,但我真的不知道为什么,也不知道选择最佳选项的合适方法。我真正应该考虑哪些因素...在 Int 16、Int 32 和 Int 64 之间进行选择的最重要标准是什么?
你做对了:最大预期数的大小。但不要太在意它。即使您选择一个整数 "too big",也不会失败,只是使用了比需要更多的内存。在磁盘上。
我认为不同大小的整数是不合时宜的。
没关系。
假设您使用的是 SQLite 持久存储,三种整数类型都表示为 SQLite INTEGER
字段(与 Core Data 的 "Boolean" 类型相同)。在 SQLite 中,字段类型无论如何都纯粹是建议性的,所以即使那样也没有多大意义。因此:它在存储方面没有任何区别space。 SQLite 将根据整数值的大小进行自我优化,Core Data 级别的较大 int 类型将无效。
对于内存使用,可能影响很小。如果您使用 64 位 int 而不是 16 位,则您请求的位数比您需要的多。但除非您拥有非常大的数据集,否则您不太可能有理由关心。
我通常的规则是对任何整数值使用 Integer 64。
当我在核心数据中创建模型时,我总是对应该选择哪种整数类型感到困惑——16、32、64。我几乎总是需要一些简单的基本数字:计数家庭中的人,对于我目前的情况。可能是 1-20 之间的数字。或者,我在另一个实例中有一个递增的案例 ID 号……无法想象会超过几百人。
事情是这样的...很明显,真正的计算机科学人士对数字有不同的看法,考虑到诸如将要处理数字的架构、处理和存储所需的 space 等因素数据、向后兼容性、未来证明等。当我想到数字时,我基本上想到的是一个值有多大。因此,当我必须在三种类型的整数之间进行选择时,我基本上对自己说,"Well, this is going to be a small number, let's just use the Int 16 option..." 或 "Shoot, I could end up with a really big number here so let's use the Int 64 choice." 基本上,我选择这些具有相同排序的数据类型我在点薯条时使用的逻辑……如果我真的很饿,我会选择大份的,如果我感到内疚,我就会选择小份的。
我学到的东西足以让我知道我没有以正确的方式考虑这个问题,但我真的不知道为什么,也不知道选择最佳选项的合适方法。我真正应该考虑哪些因素...在 Int 16、Int 32 和 Int 64 之间进行选择的最重要标准是什么?
你做对了:最大预期数的大小。但不要太在意它。即使您选择一个整数 "too big",也不会失败,只是使用了比需要更多的内存。在磁盘上。
我认为不同大小的整数是不合时宜的。
没关系。
假设您使用的是 SQLite 持久存储,三种整数类型都表示为 SQLite INTEGER
字段(与 Core Data 的 "Boolean" 类型相同)。在 SQLite 中,字段类型无论如何都纯粹是建议性的,所以即使那样也没有多大意义。因此:它在存储方面没有任何区别space。 SQLite 将根据整数值的大小进行自我优化,Core Data 级别的较大 int 类型将无效。
对于内存使用,可能影响很小。如果您使用 64 位 int 而不是 16 位,则您请求的位数比您需要的多。但除非您拥有非常大的数据集,否则您不太可能有理由关心。
我通常的规则是对任何整数值使用 Integer 64。