mongodb 近似值模式

提前预读 mongodb 中文社区 使用模式构建:近似值模式(The Approximation Pattern)

近似值用于大量写入,对于数据不需要太过精确,相近即可 比如阅读数,单篇阅读数统计,消耗数据库写入资源,后期单篇阅读数数据库大了以后,对于数据不再敏感,可以通过近似值降低数据消耗,而且大平台会模糊后面的数据前台则显示 200+、10+或者 21 万热度等

假设一篇文章,如果是热文,120000 精确的写入将会写入 120000 次,假设每次随机数等于 12 或者等于 0 写入一次近似阅读数,写入次数将降低到 10000 次左右

可以不局限于 0-12 的随机数,为了好看我这里以 12 往上加阅读数,0-100 每 100 次写入一次 100 阅读数,如果是 120000 精确的写入,会降低到 1200 写入量

这里是利用了 random 随机数的命中 0 和最大数百分比的命中率 不局限于 mongodb 数据库,其他数据库也可以实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
let i = 0,
  m = 0,
  n = 0;

// 模拟120000次请求写入
while (i < 120000) {
  // 获取0-12随机数
  const r = Math.round(Math.random() * 12);
  if (r === 0) {
    n++; // 假设写入一次+12阅读数数据
  } else if (r === 12) {
    m++; // 假设写入一次+12阅读数数据
  }
  i++;
}

// console.log(写入次数, 最终近似值)
console.log(n + m, (n + m) * 12);

// 每次计算不一样 有多有少
// 9999 119988
// 9903 118836
// 9878 118536
// 10048 120576
// 9921 119052
// 10003 120036
// 10140 121680
// 9944 119328
// 10050 120600
// 10169 122028

如果不能理解还可以看看 mongodb 文档设计集锦视频里面的 06:38 https://www.bilibili.com/video/BV1Lf4y1T7WV?p=18&share_source=copy_web