在核心数据中选择整数类型

Posted

技术标签:

【中文标题】在核心数据中选择整数类型【英文标题】:Choosing an integer type in core data 【发布时间】:2015-10-01 16:57:53 【问题描述】:

当我在核心数据中创建模型时,我总是有点困惑我应该选择哪种整数类型 - 16、32、64。我几乎总是需要一个简单的基本数字:人数在家里,就我目前的情况而言。可能是1-20之间的数字。或者,在另一个实例中,我有一个递增的案例 ID 编号……无法想象这会超过几百人。

这就是交易...很明显,真正的计算机科学人士对数字的看法不同,考虑到诸如将要处理数字的架构、处理和存储数据所需的空间、向后兼容性等因素,未来的证明等。当我想到数字时,我基本上会想到一个值被表示的大小。因此,当我必须在三种类型的整数之间进行选择时,我基本上对自己说,“好吧,这将是一个小数字,让我们使用 Int 16 选项......” ,或“Shoot,我在这里可能会得到一个非常大的数字,所以让我们使用 Int 64 选项。”基本上,我选择这些数据类型时使用的逻辑与我在订购薯条时使用的逻辑相同……如果我真的很饿,我会选择大的,如果我感到内疚,我会选择小的。

我学到了足够多的知识,知道我没有以正确的方式考虑这个问题,但我真的不知道为什么,我也不知道选择最佳选项的适当方法。我真正应该考虑哪些因素...在 Int 16、Int 32 和 Int 64 之间进行选择的最重要标准是什么?

【问题讨论】:

【参考方案1】:

没关系。

假设您使用的是 SQLite 持久存储,这三种整数类型都表示为 SQLite INTEGER 字段(与 Core Data 的“布尔”类型相同)。无论如何,在 SQLite 中,字段类型纯粹是建议性的,所以即使这样也没有多大意义。因此:它在存储空间方面几乎没有区别。 SQLite 会根据整数值的大小进行自我优化,Core Data 级别的较大 int 类型将不起作用。

对于内存使用,它可能影响很小。如果您使用 64 位 int 而不是 16 位,则您请求的位比您需要的多。但除非您拥有非常大的数据集,否则您不太可能有理由关心。

那么,我通常的规则是,对于任何整数值都使用 Integer 64。

【讨论】:

嗨,汤姆,感谢您的解释,我对使用 Int64、Int32 存储值然后获取它进行计算感到困惑。我正在使用 Swift,并且在 CoreData 属性类型中我使用了 Int64,在 64 位 iPad 上,应用程序运行良好,但在 32 位 iPad 上,应用程序崩溃,RAM 始终接近 100% 的使用率。可能是什么原因?这是存储最长可能值的最佳方式。任何文章链接将不胜感激。再次感谢。我提到了:andybargh.com/swift-numeric-data-types 和一个要点gist.github.com/kharrison/0879fc225121edaec903799cf0afb091【参考方案2】:

你做对了:最大预期数字的大小。但不要太在意它。即使您选择一个“太大”的整数,也不会失败,只是使用比需要更多的内存。在磁盘上。

我认为不同大小的整数是不合时宜的。

【讨论】:

我很惊讶也很欣慰!虽然我敢打赌,有些人会认为你的“不同大小的整数是不合时宜的”作为战斗用语……这似乎是一种激起人们的情绪。 我应该澄清一下:它们是应用程序开发的时代错误。我作为嵌入式系统中的硬件和软件开发人员工作了很长时间。在这样的生物圈中,您可以利用不同大小的整数。但可可开发? Cocoa 知道NSIntegerNSUInteger,两者大小相同。没有人关心这个。

以上是关于在核心数据中选择整数类型的主要内容,如果未能解决你的问题,请参考以下文章

Mysql 架构和索引

mysql中的字段如何选择合适的数据类型呢?

MySQL 数据类型

在 postgres 中选择字段的数据类型

Mysql数据类型的优化选择

我应该在核心数据中使用字符串而不是整数作为属性类型吗?