假设我的 Solr 模式中有一个字段,其值为 1、2、3 或 4。我不对该字段进行算术运算。该字段是记录的状态。它可以很容易地是 A、B、C 或 D。11,000,000 条记录中的每一条都具有这些状态之一。
在这个问题中,一个答案说整数“更节省内存”,所以这是一个开始。还有其他因素需要考虑吗?一个匹配比另一个快吗?
该字段不会被排序。这些值是任意的,我们永远不会进行排序。它只会用于过滤查询。
你会查询一个范围吗?因此,如果您的 1...4 确实标记了从 Bad to Great 的状态,您会查询 1-2 的记录吗?这是您可能需要它们成为整数的唯一事情(而且,由于您只有 4 个,这没什么大不了的)。
我在数据存储中的规则是,如果 int 永远不会用作 int,则将其存储为字符串。它可能需要更多空间等,但您可以进行更多字符串操作等。如果一个字段是字符串或 int,11m 记录的内存需求可能无关紧要(11m 是很多记录,但不是很重的负载对于 Solr/Lucene)。
只有 4 个不同的值,int 和 String 对于过滤查询、排序甚至范围查询的执行非常相似。