钉钉数据存储使用阿里云的表格存储,如何设计数据库?
作者:胡一
链接:https://www.zhihu.com/question/57686303/answer/158242591
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
链接:https://www.zhihu.com/question/57686303/answer/158242591
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
- 首先,如果把表格存储当做单表的MySQL来用的话,那你就用错了。MySQL是传统关系型数据库,而表格存储是NoSQL数据库,不直接支持SQL语法,特点是低延迟,高性能,大容量,适用于大数据量,比如单表PB级。
- 最终你的业务适用于使用MySQL还是表格存储,完全取决于你的业务特点。如果你的数据量比较大,达到TB,PB级别,那这时候就需要使用类表格存储(Tablestore)产品了。
- 使用表格存储后,可以满足你对低延迟(1ms~10ms的延迟),高并发(千万,甚至亿级TPS),高可靠性(99.99999999%的数据可靠性,由于使用了共享存储,那么在系统可靠性上也是高出同类产品很多),高扩展性(实时水平扩展),全托管(免运维)等大数据类的需求。
- 但是由于不支持join,事务等关系型数据库的一些功能,那这时候设计系统架构的时候就需要换一种思路:将产品的复杂功能拆分成独立的小功能模块,如果整个系统很大,那么拆分出来的每个小功能模块就是一个小系统,小服务。
- 然后,开始单独设计每个小系统的架构,这时候小系统的功能就比较单一,就比较好设计了。对于新手,等将所有小系统设计完后可以回头再去抽取公共模块,对于高手,开始就能抽象出来这些。
- 为了应付业务的快速变化,这里的关键:1是底层存储系统的高性能,高吞吐,2是高度抽象,平台化,设计简单,可重复利用的中间层。这样子的话,快速变化的业务只需要变化最外层的业务层或者说是界面,改动和变化就比较小了。
- 你说的数据冗余也是一种比较常见的设计方式,是在大数据场景中的一种折中。有时候可以简化整体系统架构,有时候会使数据膨胀,具体问题要具体分析,没有一种确切性的银弹可以解决所有的场景。
- 表格存储也有很多高级功能,可以用来辅助系统架构,比如多版本,宽行。对于“ 一段时间内某个部门下所有尚未转正的员工的打卡记录.”这个需求,就可以使用多版本或者宽行。
- 如果使用多版本:建一个表:ProbationPeriod,打开多版本,版本数可以设置为200, 每一行都是一个未转正员工,主键列可以是:员工ID,属性列可以是:attence。比如5月10日,小张入职,开始试用期,第一天上班打卡的时候,往ProbationPeriod表中写入一行(UpdateRow),主键是小张,属性列是attence,值是打卡位置,版本号是当前时间,如果不写版本号,那么再写入表格存储的时候,表格存储会使用当前时间。这样子,表ProbationPeriod中就记录了小张在5月11日打卡的位置,时间,后面每天都可以做同样的写入,这样,三个月后,可能保存30*3=90天的记录,这时候只需要通过一个GetRow,指定主键值,这样就可以读出attence列的所有版本的值。
- 如果使用宽行:就是每一次写入一个新列。如果3个月试用期,也就90个左右的列。
- 其他:还有其他方案,先不写了。
- 表格存储是自研的产品,在功能迭代上不仅快,而且自由度很大,对于社交场景,也做了一些功能来简化社交产品的架构,比如去年的自增列功能,具体可以看这篇文章:高并发IM系统架构优化实践-博客-云栖社区-阿里云
- 如果你的数据量很大,业务也很复杂,且想使用云产品做存储的话,可以到阿里云官网给表格存储提工单,让表格存储的专家们结合你的数据和场景设计一个适合你的解决方案。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端