day3 - 减少预期外的变数, 握在手里的就变多了

storage 选用: redis & scylla & mysql 简介

每件事情的走向要是用二分法来切分的话, 大概就是预期内跟预期外了。
自己写的code、使用的套件、使用的周边配套可以自己决定要不要更换, 但是除了自己写的code之外, 套件跟周边配套使用後就会存在着不可预期的状况, 所以在套件的选用上需要经过分析跟评估, 甚至如果已知的需求够明确也可以先对同性质的套件先做压力测试之後再下决定。

储存工具通常是我会先评估的项目,每种不同性质的资料依照内容、读写频率、储存时间、查询复杂度...等, 搭配储存工具的特性、优缺点、工具限制等资讯来找出最适合的工具。

常用储存工具简介

从昨天的流程图中可以看到本次开发需要应用到两个资料储存工具
https://i.imgur.com/PUOerqo.png

  • 一个用来储存各层级点数上限设定值
  • 一个用来储存统计的点数状况

我会整理一下资料的差异跟特性,再来决定工具, 先分析这两种资料

项目 异动频率 读取频率 保存时长 资料量
上限设定值 设定後每月异动N次以下 每次统计都要查 永久 M笔以下
统计点数 每日会有N*10次以上异动 每次异动都要读 至少24hr 每天M*100笔以上

这边介绍常用的三个储存资料的工具

  • MYSQL

    号称全世界最受欢迎的open source关联式资料库管理系统, 搜寻功能是它的强项, 可以自订各种搜寻条件, 也可以依照常用的搜寻条件设定INDEX, 但是在高频率的读写较耗效能且会变慢, 所以通常会拿来做没有即时回应需求的资料查询, ex: 统计报表或log纪录。
    MYSQL 还有提供Transaction 功能, 可以确保资料更新整批成功或整批失败, 在需要高完整性的操作时可以选用, ex.金额相关异动。

  • Scylla

    传说中最快的NoSQL DB, 支援横向扩展, 快速读取资料的表现很好, 即时高频的读取也不影响效能。但是搜寻功能需要按照建立的INDEX来操作, 如果要扩充搜寻条件需要增设很多VIEW, 相较於MYSQL来说,支援复杂搜寻条件的功能较差。
    Scylla我们通常拿来存放异动频率低, 但是需要高频读取的项目。

  • Redis

    Redis是把资料储存在缓存中, 它也可以设定资料持久化来备份资料。Redis是我最常用的储存工具, 主要用来记录短期资料, 在设定expire time之後资料就会自动消失, 不需要额外处理清资料。相较於另一个缓存Memcached, Redis 提供的操作指令很丰富, 可以依照不同的情境选择不同的储存资料结构, 同时如果有需要排队异动同一个key的需求, Redis也支援lua script操作, 可以把一整串Redis 语法写成scrpt 一次操作, 减少IO的处理次数。

工具选用

在这次的点数统计需求中, 要存放点数上限设定值资料且会在每次异动时读取设定值来使用,但是没有类似报表的复杂查询需求,所以选用Scylla来存放点数限额设定, 而每天的点数统计需求不需要长期保留也不需要人为介入去异动已经统计的点数, 所以会选用Redis来存放。

https://i.imgur.com/oHTNghe.png


<<:  Day11 - 套用 Tag Helper - 复杂型别 object + collection

>>:  @Day11 | C# WixToolset + WPF 帅到不行的安装包 [分离Product.wxs]

[Day12] Git 学习总整理

今天把这几天学习的纪录做一个总整理,在指令或是GUI操作上的心得是 指令操作熟悉者可以带入各类参数灵...

[第十五只羊] 迷雾森林舞会IX 玩家加入房间

天亮了 昨晚1号玩家被杀死了 关於迷雾森林故事 杂讯 洛神:昨晚1号玩家被杀死了,1号玩家发动角色技...

ESP32_DAY2 开发环境-Arduino IDE

在开始玩ESP32开发板之前先来准备开发环境吧! ESP32系列控制板可用乐鑫科技提供的SDK、Ar...

Rust-安装环境

安装rustup rustup是rust版本管理器 安装指令如下 curl --proto '=ht...

[Day 20] 资料标注 (1/2) — Forget about the price tag ♫

The only thing that never changes is that everyth...