美文网首页
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