0

我有 64 位无符号整数的值,我需要将它们存储在没有无符号整数类型的 mongodb 中。我看到了将它们存储在其他字段类型中并转换进出的三种主要可能性:

使用带符号的 int 可能是最简单和最节省空间的,但缺点是它们不可读,如果有人忘记进行转换,其中一些会起作用,这可能会掩盖错误。

对于没有经验的程序员来说,原始二进制文件可能是最难处理的,并且还存在非人类可读性的问题。

字符串表示是空间效率最低的(unicode 中约 40 个字节,每个字段 8 个字节),但至少所有可能的值都会正确映射,并且查询只需要转换为字符串,而不是更复杂的转换.

我需要这些值可以从不同的平台获得,因此单一驱动程序特定的解决方案不是一个选项。

我错过了什么主要的优点和缺点?你会用哪一个?

4

3 回答 3

1

我只是将数字塞进字符串中。这是最简单和最兼容的解决方案。大多数常见的编程语言在其标准库中提供字符串到数字的对话。如果其他人稍后需要使用不同的程序读取您的数据库,他们不需要弄清楚您的二进制存储格式。另一个好处是,如果需要,您可以存储大于 unsigned int64 的数字。

于 2010-03-18T05:45:15.813 回答
0

为什么字符串值必须是 unicode?您知道该值将始终是数字,因此您可以使用标准 varchar,这意味着不超过 20 个字节。老实说,这实际上取决于如何使用该值。是否会在很多使用无符号 64 整数的源的连接中使用它?如果是这样,则每行都必须进行转换。它是否仅用于参考或过滤特定值(而不是连接到 mongodb)?如果是这样,那么字符串值将表现得足够好。

如果可能的话,另一种解决方案是在 mongodb 中添加一个 64-signed int 列,该列表示 64 unsigned int 的签名版本,然后在您的数据库中使用 signed int。通过这种方式,您可以加入苹果和苹果,并可以将一个系统的值与另一个系统进行比较。

鉴于您所说的,我仍然认为 varchar 列将表现得足够好,并使值人类可读。

编辑另一种解决方案是将值存储在带符号的 64 位 int 中,并向您的项目添加一个计算无符号 64 位值的方法,以便用户可以验证该值。

于 2010-03-18T06:09:11.927 回答
0

我会说使用二进制 - 这是上面唯一的解决方案,其中正确获取查询的排序顺序将是微不足道的。

于 2010-02-18T14:21:59.797 回答