【问题标题】:Pros and cons of ways of storing an unsigned int without an unsigned int data type在没有 unsigned int 数据类型的情况下存储 unsigned int 方法的优缺点
【发布时间】:2010-02-18 13:31:32
【问题描述】:

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

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

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

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

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

我遗漏了哪些主要优点和缺点?你会用哪一个?

【问题讨论】:

    标签: integer mongodb biginteger unsigned


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 在这种情况下,我实际上根本不关心排序。这些数字没有意义,是随机分配的。它们只是指向另一个将它们用作键的数据库的指针。
      【解决方案3】:

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

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

      鉴于您所说的,我仍然认为 varchar 列的性能足够好,并使值易于阅读。

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

      【讨论】:

      • 字符串值必须是 unicode,因为 mongodb 只存储 unicode 字符串。 mongodb中也没有join。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 2016-01-06
      • 2023-03-15
      • 2014-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多