首页 > 数据库 >阿里网盘的跨用户故障和数据库选型

阿里网盘的跨用户故障和数据库选型

时间:2024-09-17 23:35:09浏览次数:10  
标签:OO 文件 网盘 数据库 选型 SQL scope id

这两天阿里云网盘出现故障,可以访问其它用户的文件。这在商业上是很可怕的。

这个故障是什么原因导致的呢?网上有一些说法。最可信的是 SQL 查询没写条件,查了所有的文件。

试想如果不是关系型数据库,在普通OO编程语言里,断不会发生这样问题,在OO语言里, user.files 就是他的文件,不可能访问到别人的文件。

class User{
  List<File> files
}

过去我也认为直接用SQL更好,ORM 最终也是SQL,何必脱裤子放屁。现在看来,如果阿里用了 ORM,这个问题就不会发生。

我们知道,RDB 和 OO 阻抗失配,那么就应该用和 OO 更适配的 NoSQL。对于个人服务,NoSQL 是更好的选择。SQL用于做数据分析更合适。

说到 RDB 这种数据全堆一起的问题,朋友一个公司在做 SaaS,该 SaaS 给每个公司准备一个单独的数据库,彻底隔离,用户不可能访问到其他用户的数据。这么一来有上千个客户就有上千个数据库,看起来很荒谬。的确,我们当时都震惊了。现在看来这种做法固然极端了一点,却也暴露出,关系型数据库的确有它的问题。

那么,RDB 有没有办法避免该问题呢?

问题来源我们可以简化理解为,系统里有用户表和文件表两个表,通过外键关联(即使没搞物理外键逻辑上必然有外键的):

User
id
File
id
user_id

从问题描述看,也可能有一个文件夹的事物,外键指向文件夹,这里就不深究了。

总之,所有用户的文件实际上放在同一个文件表。这是关系型数据库设计的基础观念。

幸运的是,有的关系型数据库是可以避免该问题的。这就是 PG。在 PG 里,有一个广泛使用的字段类型,数组。所以 PG 可以像 NoSQL 一样,在 User 表建文件 ID。

User
id
file_ids int[]
File
id

当然,后面依然有分页之类的课题等着我们,但这起码解决了集中存放的问题。

长期以来,阿里一直选用可怜的 MySQL 作为 DB 存储,又经常使用 MyBatis 之类裸 SQL 的技术方案,建议以该事故为把手进行深刻的复盘,审视在架构设计、数据管理以及技术选型上的决策,给出更为根本的解决方案。嗯。

让我们仔细看看问题到底出在哪儿?

上文说到,OO 和 FP 是一回事,FP 的要点是什么呢?我想稍微深入研究过的都知道:闭包。 FP 也好,OO 也好,实际上都提供了数据的 scope 机制。所有的数据都有 scope,scope 外要访问只能通过 public 或暴露函数等手段。

而 RDBMS 是没有 scope 的,尽管它能通过一类一表格一行一对象的方式表达对象,但这种方式本质上是一种降维技术,在降维过程中丢失了对象的 scope,于是对象全部变为了顶级的,也就是说没有了 scope 导致失去了封装,所以该问题是理论上必然导致的。

那么用 PG 或 NoSQL 就 OK? 这个问题问的很好,实际上都不够好,或者说还有很大的进步空间。

标签:OO,文件,网盘,数据库,选型,SQL,scope,id
From: https://www.cnblogs.com/inshua/p/18417747

相关文章

  • JDBC简介与应用:Java数据库连接的核心概念和技术
    简短介绍JDBC及其重要性。简短介绍JDBCJDBC(JavaDatabaseConnectivity)是一种用于执行SQL语句的JavaAPI并且独立于特定的数据库厂商。它允许开发者以一种标准的方式从Java应用程序中访问关系型数据库,这意味着一旦你掌握了JDBC的基本操作,你可以轻松地将你的应用程......
  • Java和数据库开发规范
    java开发规范第一节:命名风格1.方法名,参数名,成员变量都统一使用lowerCamelCase风格,必须遵从驼峰形式2.类名必须使用upperCamelCase风格,但以下情形例外:DAO/BO/PO/VO/UID3.常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长4.代码中命名均不能以下......
  • eyoucms易优无法安装,提示当前数据库结构与官方不一致
    当你在安装易优CMS(EyouCMS)时遇到“当前数据库结构与官方不一致”的提示,这通常意味着你的数据库版本或结构与CMS所需的版本或结构不符。这种情况通常是由于以下几个原因造成的:数据库版本过低:数据库版本低于CMS所支持的最低版本。数据库文件版本不匹配:数据库文件版本与CMS源码版......
  • 易优CMS后台如何备份数据库
    步骤1:进入后台登录易优CMS后台。在后台左侧菜单栏中找到“功能地图”(低版本的程序点击“更多功能”)。步骤2:进入备份还原功能在“功能地图”中找到“备份还原”功能,并点击进入。步骤3:进行数据备份在“备份还原”页面中,点击“数据备份”。等待一段时间,直到备份完成。......
  • 易优CMS网站迁移提示数据库版本不一致
    当你在迁移EyouCMS网站时遇到“数据库版本不一致”的提示,通常是因为目标数据库的版本与EyouCMS所需的版本不一致。为了解决这个问题,可以采取以下几个步骤:1.确认数据库版本首先,确认你的目标数据库版本是否符合EyouCMS的要求。EyouCMS通常支持MySQL5.6及以上版本。检查目标数......
  • 数据库tips21
    (十四)、数据/数据仓库ETL,Extraction-Transformation-Loading的缩写,中文名称为数据提取、转换和加载。ETL负责将分散的、异构数据源中的数据如关系数据、平面数据文件等抽取到临时中间层后进行清洗、转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础。OL......
  • C#方法将数据库图片批量插入到EXCEL中
    效果图一般数据库图片查询出来为byte[]类型这里使用的是Spire.Officefor.NETnet4.0和net6.0可以使用附件的dll,其他版本可去官网下载相应的dll官方网站:https://www.e-iceblue.com/GitHub:https://github.com/eiceblueNuGet:https://www.nuget.org/packages/FreeSpire.Off......
  • 智慧社区|基于springboot+vue的智慧社区系统(源码+数据库+文档)
    智慧社区目录基于springboot+vue的智慧社区系统一、前言二、系统设计三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台Java领域优......
  • 厨艺交流平台|springboot+vue的厨艺交流平台系统(源码+数据库+文档)
    厨艺交流平台目录基于springboot+vue的厨艺交流平台系统一、前言二、系统设计三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台Jav......
  • 网上摄影工作室|springboot+vue的网上摄影工作室系统(源码+数据库+文档)
    网上摄影工作室系统目录基于Springboot的摄影分享网站设计与实现一、前言二、系统功能设计三、系统实现四、数据库设计1、实体ER图五、核心代码六、论文参考七、最新计算机毕设选题推荐八、源码获取:博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家......