【问题标题】:Storing version number in databases (MongoDB)在数据库中存储版本号(MongoDB)
【发布时间】:2019-05-19 07:36:11
【问题描述】:

我想将版本信息存储在数据库(特别是 MongoDB)中,以便快速排序和查询特定范围。

版本信息如下所示:

0.1.0.0
0.7.56.101
0.99.40.154
10.2.153.200

我发现这篇文章here 关于这个主题。其中总结了以下选项:

  1. 使用 varchar

  2. 使用三个数字字段,Major、Minor、Patch

  3. 两者都用。

我正在考虑第四个选项,其中版本信息可以转换为 32 位 int,其中每个版本占位符占用 8 位。

例如:

0.7.56.101 -> 00000000 00000111 00111000 01100101 -> 473189

因此将存储值 473189。我知道这限制了版本控制的扩展,因为每个八位字节的最大版本是 255 (255.255.255.255),但我想说这对我的一生来说已经足够了。

这当然需要对版本信息进行一些打包/解包,但可能会导致快速搜索结果。因为我可以使用少于/多于搜索。

这是处理此问题的好方法还是有更好的方法?

【问题讨论】:

    标签: sql database mongodb version-control


    【解决方案1】:

    我建议单独存储每个部分,以便更轻松地访问版本号的每个部分,然后将它们用零填充到规范格式中进行排序和比较。因此,每个段左填充三个字符的示例版本号将变为:

    000.001.000.000
    000.007.056.101
    000.099.040.154
    010.002.153.200
    

    这很容易从基值生成,正确排序,并且可以正常进行比较。此外,其他格式的输出很容易从基本值生成,例如传统的无填充点分符号。

    【讨论】:

    • 当您的意思是单独存储每个部分时,您的意思是010.002.153.200 将每个八位字节分隔到一个单独的字段?主要=010,次要=002,修订=153,补丁=200?还是存储单个字段 VERSION=010.002.153.200?
    • 是的。在传统的数据库设计中,谨慎的数据应该存储在单独的列中,当然,由于您使用的是 MongoDB,我不知道这种传统的规范化是否适用于 NoSQL 数据库理论。
    • 如果我将它存储在单独的字段中,我认为它可能会使排序变慢,而不是将其转换为一个 int,其中更大或更少的逻辑可以应用于该单个 int 字段。也许我可以同时使用这两种方法,因为添加一个额外的 int 字段的开销并不大,而且我不需要担心写入版本字段,因为一旦添加它们就不会改变。
    猜你喜欢
    • 2014-04-13
    • 2021-08-09
    • 2020-10-17
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2019-06-01
    相关资源
    最近更新 更多