neo4j-admin
工具可以从CSV导入数据。 其中一个选项需要的是:
--normalize-types[=<true/false>]
确定是否将属性类型规范化为 Cypher 类型,例如
变为int
,long
变为float
。double
默认:
true
如果我没有显式设置
--normalize-types=false
,那么 neo4j-admin
工具会生成如下消息:
Property type of 'foo' normalized from 'int' --> 'long' in /path/to/my-nodes.csv
我的数据库有数十亿个属性,所以如果可能的话,我想节省空间(和 RAM)。我知道整数属性适合 32 位,并且浮点属性不需要 64 位精度。 (有关每种属性类型的位宽,请参阅此参考。)
例如,较窄的类型实际上可以节省空间/RAM吗?它们是否与 Cypher 查询不兼容?
我看到添加了对规范化类型的支持的commit有这样的评论:
导入器标准化属性类型以匹配 Cypher
实际上意味着在某些 .csv 标头中指定的类型,表示 某些属性应该是类型,例如“short”将被导入为 输入“长”。基本上所有整数类型都会被导入和存储 因为长整型和浮点类型将被导入并存储为 双倍。
这将是默认行为,但可以针对特定情况进行覆盖 通过提供“--normalize-types=false”的场景
我认为这意味着如果您不标准化类型,那么每当您使用 Cypher 时,任何非标准化数据类型都必须与标准化类型相互转换。因此,即使您可以节省存储空间,您的 Cypher 查询也会变慢。