美文网首页
NoSQL数据模型设计 - 特殊应用建模 - 货币数据

NoSQL数据模型设计 - 特殊应用建模 - 货币数据

作者: 李桐2000 | 来源:发表于2020-10-02 09:45 被阅读0次

    本文为NoSQL数据模型设计系列的一部分。

    货币数据需要精确数据类型并能够进行精确运算,但是常见的浮点型小数不支持精确计算。这成为货币数据建模的重要关注点

    在mongodb中一般有两种模型处理货币数据

    • 数值模型
      当需要精确运算时,需要数值模型,有两种方式

      1. 采用十进制BSON类型
      2. 采用比例因子
    • 非数值模型
      不需要做精确运算时或可接受近似计算,可用非数值模型

    数值模型

    十进制BSON类型

    mongodb 3.4开始支持decimal BSON类型,它能够支持精确数据存储和运算。

    例如,使用NumberDecimal构造decimal BSON数据

    db.gasprices.insert{ "_id" : 1, "date" : ISODate(), "price" : NumberDecimal("2.099"), "station" : "Quikstop", "grade" : "regular" }
    
    采用比例因子

    将货币数据乘以固定的10的方幂转化为64位整形(long BSON类型)。这里,转化系统10的方幂需要被应用记住,以便能够将存储的整形转换回货币数据。

    例如,9.99美元以1000的比例因子保存为

    { price: 9990, currency: "USD" }
    

    非数值模型

    非数值模型使用两个字段保存货币数据

    a. 采用非数值类型例如string或BinData保存精确数据
    b. 采用浮点型例如double保存近似数据

    例如

    {
      price: { display: "9.99", approx: 9.9900000000000002, currency: "USD" },
      fee: { display: "0.25", approx: 0.2499999999999999, currency: "USD" }
    }
    

    近似值字段用来范围过滤或排序,精确值字段用于显示或进一步处理。

    完整内容请查看NoSQL数据模型设计系列

    相关文章

      网友评论

          本文标题:NoSQL数据模型设计 - 特殊应用建模 - 货币数据

          本文链接:https://www.haomeiwen.com/subject/hsrcuktx.html