查看原文
其他

从电商系统认识数据与数据的存储

SunnyZhang 数据存储张 2024-05-06

作者已经很少从实体店买东西了,家里的日常用品大多通过电商平台(购物网站)购买。相信本书的读者一年不知道要多少次通过电商App浏览和购买商品。既然大家对电商系统都比较熟悉,本节将以电商系统作为研究对象,进一步聊聊数据与数据存储的相关内容。

前文介绍的视频、音频和Word文档等各种文件还是聚焦在个人数据方面,而电商系统的数据则聚焦在企业数据了。虽然这么划分并不严格,但本节的焦点更多的是从企业数据方面介绍数据和数据存储的相关内容。

我们以一个具体的例子作为切入点,这样会更加形象一些。比如我们在某平台搜索“文件系统”这个关键字,想看看这方面的书籍。当我们输入关键字,并单击“搜索”按钮后会列出相关商品的列表,如图 1‑5所示。

15 电商搜索界面

这个看似非常简单的过程,其实是非常复杂的,整个过程涉及手机与数据中心数百次数据传输,并且会涉及到电商系统的多个子系统。如图 1‑6是一个极度简化的电商系统,当我们通过手机搜索“文件系统”关键字时,手机App(Application的简写,也即手机应用软件)会通过https协议将查询请求发送电商的数据中心(步骤1)。手机App发送的查询请求在计算机层面也称为数据。    

16 商品搜索端到端流程

用户的请求到达数据中心后会经过一个称为负载均衡器的设备。数据中心的负载均衡器会将请求路由到核心业务集群的某个节点进行处理(步骤2)。核心业务软件根据关键字从数据库查询相关信息(步骤3),根据数据库返回的信息,核心业务将其组装为页面信息后反馈给手机(步骤4),而这个页面也就是我们在手机上看到的商品列表信息了。

步骤4返回的页面是一个静态页面,其中包含很多资源,比如图书的封面和脚本等内容。这些资源在静态页面中只是一个占位符,如果想正常显示图书封面等图片资源,手机App还会请求具体的资源,如图 1‑5中图书封面的图片。

图片的传输就涉及步骤5到步骤7的相关流程,或者步骤8到步骤10的流程。两者的差异是一个从缓存系统获取图片资源,另外一个是从文件系统或者对象存储系统获取图片资源。从缓存获取图片资源要比从缓存系统快的多,因此企业为了提高访问速度,会将一些比较热点商品的图片放到缓存中。上述步骤5到步骤7,或者步骤8到步骤10会被反复执行很多次,具体次数与第一次请求中涉及到的资源的数量有关。(注:实际情况还要复杂的多,因为在整个链路上还会涉及DNS解析和CDN缓存等相关内容。为了让大家容易理解,这里省略了相关内容。)    

上述一个查询请求已经涉及4种不同类型的存储系统,分别是存储结构化数据的关系型数据、存储非结构化数据的对象存储和文件系统以及缓存数据的缓存集群。这里涉及结构化数据和非结构化数据的概念,大家暂时不用深究,本节后面会介绍。

同时,对于上述4种存储系统,数据库、对象存储和文件系统系统是可以将数据持久化的软件系统。所谓持久化就是将数据保存在如硬盘或者SSD等即使系统掉电也不会丢失数据的设备上。缓存系统通常不会持久化,系统掉电后数据丢失,需要重新从持久化设备上加载数据。

除了上述与业务直接相关的存储系统外,对于电商系统通常还有两块非常重要的业务涉及存储系统,一个是运维监控系统,其中存储设备的运行状态和配置数据;另外一个是日志系统,包含业务运行的日志信息。

前面我们简要介绍了电商系统涉及的几类主要的存储系统,接下来我们介绍一下电商系统涉及的主要的数据类型。其中最主要也是最为重要的数据就是商品的相关数据,以我们直观看到的商品信息为例,其中包含商店名称、商品名称、价格、库存、商品照片的存储路径等等。

如果大家仔细观察就会发现,搜索结果遵循相同的结构,这些数据可以通过表格的方式组织。如图 1‑7所示是展示内容与数据表的对应关系。可以看出这种类型的数据结构明确,我们通常称这种类型的数据为结构化数据

17 结构化数据示意图

需要说明的是电商系统的结构化数据量是非常大的,关系也是非常复杂的。图 1‑7中我们只是介绍了一个简单的例子,实际上可能包含上百个表格,而且表格之间还会存在关联。比如除了包含商品信息的表格外,通常还会包含账号信息、订单信息和支付记录等非常多的信息。    

图 1‑7中的图片并不会存储在数据库中,而是存储在其他存储系统中,比如文件系统、对象存储或者临时存储在缓存集群中。以缓存系统为例,图片数据在缓存中以键值对的形式存储,其中“键”为文件名称,“值”为图片文件的具体内容。

         

 

18 文件存储示意图

图片文件的数据通常是作为一个整体存在的,必须专用软件才能打开才能看到图片的效果。如果我们用二进制工具打开文件,看到的是一堆的数字,具体如图 1‑9所示。实际上,图片文件有很多格式,这些格式定义了如何描述图片中每一个点(专业术语叫像素)颜色。可以看到,像图片文字这种数据是作为一个整体存在的,并不像数据库数据那样结构清晰,这种数据称为非结构化数据    

19 图片文件内容的数据

除了结构化数据和非结构化数据外,还有一种介于两者之间的数据,这种数据称为半结构化数据。比如上面商品信息,不仅仅可以通过SQL数据库存储,还可以通过文件以JSON字符串的形式存储。由于通过一个字符串来存储,似乎并没有清晰的格式,但是字符串内部却有比较清晰的结构,一般称这种类型的数据为半结构化的数据

    {

        “文件系统”:{

             {“名称”: “文件系统技术内幕”, “价格”:“48.36“,”URL”:”image.xx.com”},

             {“名称”: “分布式统一大数据虚拟文件系统”, “价格”:“49.53“,”URL”:”image.xx.com”}

        }

    }

本节我们简要介绍了企业级应用常见的存储系统以及数据的常见类型。这部分内容相对专业一些,如果大家有些内容理解不了也没关系,我们接下来会逐步深入的分析上面涉及的每一个概念。    

计算机数据存储简史,从纸到云的变迁    基于Fuse的最简单的文件系统    代码覆盖率测试,聊聊gcov和lcov   SAN存储的概念与基于iSCSI的操作实战   全面了解SSD,SSD关键术语全面解析    分布式虚拟文件系统,数据编排小能手   高性能的基础RAID0,实操与代码实现解析   网络文件系统,年近五十岁,老当益壮    弹性空间之道,逻辑卷管理(LVM)技术    计算机数据存储简史,从纸到云的变迁   基于树莓派和硬盘柜搭建一个几十TB的家用NAS    Linux存储软件栈到底有多复杂,存储软件栈全景概览    分布式存储的软件架构与案例解析    数万客户端NFS服务的困境,聊聊自动挂载技术    深入了解一下SSD的相关内容    什么是文件系统,以Linux中的Ext4为例细聊一下   对象存储,从单机到分布式的演进   为什么都说NFS读写性能差,如何进行优化?SPDK块设备抽象层bdev对多种后端模块(驱动)的支持 计算机的存储体系与性能金字塔 Linux是如何将硬盘展示给用户的,从物理设备到通用块层


继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存