大数跨境

一种更优的电商产品信息存储方式

一种更优的电商产品信息存储方式 电商实践
2016-07-03
3
导读:电子商务网站如何存储和访问产品信息会对站点性能产生重大影响。无论是大型还是小型在线零售企业,

Amazon Web Services DynamoDB、MongoDB、Couchbase 和 MarkLogic 等 NoSQL 数据库,为存储产品目录信息提供了更优方案。

电子商务网站的产品信息存储与访问方式直接影响网站性能。无论规模大小,在线零售企业均可从 NoSQL 技术中受益。理解该技术前,需先认识产品信息描述的复杂性。

产品属性问题

多数电商平台将产品信息存储在关系数据库中,以类似电子表格的表形式保存。例如一件小型红色T恤,包含唯一ID、SKU、标题、尺寸和颜色五个属性,每个属性占据一列,一行代表完整产品信息。

ID SKU 标题 尺寸 颜色
1 POI0987654321 很棒的衬衫 s 红色

对于仅销售T恤的网站,此方法效果良好。若增加其他尺码和颜色的同款衬衫,只需在表中添加行即可。

ID SKU 标题 尺寸 颜色
1 POI0987654321 很棒的衬衫 s 红色
2 POI0987654322 很棒的衬衫 m 红色
3 POI0987654323 超赞T恤 L 红色
4 POI0987654324 超赞T恤 XL 红色
5 POI0987654325 超赞T恤 S 蓝色
6 POI0987654326 超赞T恤 M 蓝色
7 POI0987654327 超赞衬衫 L 蓝色
8 POI0987654328 超赞衬衫 XL 蓝色

此类数据库查询编写简单且加载迅速。但若零售商扩展品类(如裤子),问题便会出现:裤子属性集不同,通常以腰围和裤长表示,而非小、中、大。

为解决该问题,可在表中新增列。

ID SKU 类型 标题 尺码 腰围 内缝长 颜色
1 POI0987654321 衬衫 很棒的衬衫 s 红色
2 POI0987654322 衬衫 很棒的衬衫 m 红色
3 POI0987654323 裤子 Neat Pants 30 30 黑色
4 POI0987654324 裤子 Neat Pants 30 31 黑色

此方案虽可行但难以扩展。若零售商持续增加产品类型:

  • 腰带:需长度和材质属性;
  • 帽子:需帽型属性(如按扣式或弹性式);
  • 鞋子:需鞋带长度和孔眼数量属性;
  • 贴纸:需高度、宽度和粘合剂类型属性;
  • 音乐:需艺术家属性及曲目列表存储方式;
  • 电影:需导演、演员、评级、制作年份等属性。

此外,上述示例尚未包含价格、售价、成本、重量、运输尺寸等通用属性。很快,数据库表列数将达数百甚至数千,且多数列为空(如小号红T恤仅需约五列,其余均为空白)。这种单表方案托管成本高,严重浪费内存。

若为每种新产品类型分配独立表,可消除空间浪费:

T恤产品表
ID SKU 标题 尺寸 颜色
1 POI0987654321 超赞衬衫 S 红色
2 POI0987654322 超赞衬衫 M 红色

裤子信息则存入另一张独立表:

裤子产品表
ID SKU 标题 腰围 内长 颜色
3 POI0987654323 整洁的裤子 30 30 黑色
4 POI0987654324 整洁的裤子 30 31 黑色

该方案虽解决空间问题,但管理困难:每新增产品类型均需创建自定义表,平台需跟踪所有表及其关联关系。显示同一制造商的多类产品可能需多次数据库查询或“连接”(joins)操作。

第三种解决方案是实现实体-属性-值(EAV)系统,Magento 等主流电商平台即采用此法。EAV 通过多个表存储产品信息片段,以下为实体部分:

产品实体表
产品 ID SKU 标题
1 POI0987654321 很棒的衬衫
2 POI0987654322 很棒的衬衫
3 POI0987654323 Neat Pants
4 POI0987654324 Neat Pants

另设表存储单个属性的值:

产品属性表
产品ID 属性 值
1 尺寸 S
1 颜色 红色
2 尺寸 M
2 颜色 红色
3 腰围 30
3 内缝长 30
3 颜色 黑色
4 腰围 30
4 内缝长 31
4 颜色 黑色

EAV 方案通常涉及三至五个以上独立表,可能导致产品信息访问速度较慢。尽管如此,对关系型数据库而言,它仍是管理产品目录的较优选择。

面向电子商务产品信息的 NoSQL

NoSQL(非关系型数据库)采用全新存储方式,摒弃结构化行列表格,以一致性换取可用性、速度与灵活性。尽管键值对数据库已存在数十年,NoSQL 近年才在 Google、Facebook、eBay 和 Amazon 等大型互联网企业中普及,以满足海量复杂信息的高速访问需求。

NoSQL 架构因实现而异,但核心原则是将项目所有数据存储于单一容器(项或文档)中。这些文档常以 JSON 格式存储,对 Web 开发人员极为友好。

电商产品在 NoSQL 中包含唯一 ID、通用属性及特有属性。例如小红衬衫可表示为:

{ unique_id: 'HY8765NBg6yYT77nBhNkln543NjNhYTR', sku: 'POI0987654321', type: ‘t-shirt’, title: 'Amazing Shirt', attributes: { size: 's', color: 'red' } }

特定裤子与衬衫共享部分结构,但拥有灵活的不同属性:

{ unique_id: '99iIiGtg6GHGjfj776098JjHGtgfffhhh', sku: 'POI0987654323', type: 'pants', title: 'Neat Pants', attributes: { waist: '30', inseam: '30', color: 'black' } }

零售商可销售任意产品类型,无需修改数据库表或追踪异构属性。腰带仅是数据库中的另一个容器:

{ unique_id: 'jjfJlkjsdfALKJljJLKDJ877KJNBB', sku: 'BE1888477', type: 'belt', title: 'Studded Belt', attributes: { size: '30', length: '30', color: 'black', material: 'leather' } }

NoSQL 显著提升灵活性,简化产品数据存储与管理,并加快单产品查询速度——产品数量越多,优势越明显。

NoSQL 考量因素

SaaS 电商平台可能无法利用 NoSQL,但使用许可电商平台或定制解决方案的零售商,可将 NoSQL 作为产品目录信息的更优选择。尽管关系数据库适用于多数场景,NoSQL 往往是产品信息管理的更佳方案。

【声明】内容源于网络
0
0
电商实践
电商实践
内容 8053
粉丝 0
电商实践 电商实践
总阅读37.4k
粉丝0
内容8.1k