订单内商品数据应该怎么保存

方案一

在订单创建的时候直接把商品数据保存在订单里面,作为订单的一个附属字段

这样子后续修改商品,不会对已经在订单内的商品任何影响

问题:如果商品修改不频繁的情况下,会大量增加订单数据的大小,同一个商品下10单,10个单里面都有商品数据(特别是需求显示商品的字段较多时,比如规格,产地,单位等等等等)

方案二

在订单创建的时候,对商品生成一个快照存在一个商品快照表中(同一个商品可含多个快照,订单创建时判断商品快照是否为最新,最新则不新生成快照),订单内存储商品快照ID,显示订单商品时,用ID去取商品快照显示

这样子后续修改商品,不会对已经在订单内的商品任何影响,

问题:比如订单只保存最近一年,一年以前订单自动归档,那商品快照表就需要单独处理判断商品的快照是否该归档,如果商品快照不定期归档,数据量会无限变大

方案三

创建订单直接保存商品ID,显示商品的时候在去商品表里查询商品

这样子最节省空间

问题:如果商品删除或者修改了之后,订单也会跟着变

请问大家这样子的数据究竟怎么存合适,方便清理归档,快速查询,节省空间。

回答

最开始用的方案三,发现有问题,然后改的联合使用你的方案一和方案二

订单里面存产品id和版本号还有其他关键信息,如商品名称、价格、供应商等。(查询的时候不用连表)

然后商品还有一个带版本号的历史表,可以根据订单里的产品id和版本号关联查询到。

求大神们赐教,这个问题困扰我好久了,一直拿不定主义到底用何种方式存储。要考虑到以后订单量超大的情况,所以就怕以后需要重写,不敢随便定义。

使用方案二比较好,其中快照的字段可以不完全照办商品表的 — 快照一般不需要筛选只是用来查看,可以把多个相关字段合并成一个字段。

Just my 2 cents.

尽管不熟悉此类业务,但是否可以考虑在商品表中保存变动信息。

attr_history: [

{

attr: name,

value: value,

start: new Date(2016, 1, 1),

end: new Date(2016, 4, 1)

},

{

attr: name,

value: value,

start: new Date(2016, 1, 1),

end: new Date(2016, 4, 1)

}]

方案一:“10个单里面都有商品数据”,比如一个20160901版本的商品,有1000个人买了,没必要每个订单里面都存一下这个版本的商品数据,冗余过度

方案三:业务不合理的啊

方案二:其实就算不说订单这事,也需要保存一个商品的所有历史版本(快照)。

问题解决:商品快照可以采取一个定期归档的措施,归档可以采取转移至只读数据库等措施。另为了提高使用性能和使用时长,可以对商品快照进行分表,比如201609一个商品快照表,201610一个,具体看你们的业务量和具体的业务需求了。

python 数据结构定义_【Python】数据结构如何定义以及清理 例如订单的附带商品信息数据...相关推荐

  1. Python爬虫实战,requests+openpyxl模块,爬取手机商品信息数据(附源码)

    前言 今天给大家介绍的是Python爬取手机商品信息数据,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是这样的纯文本 ...

  2. python 100实例_[Python] Python 100例

    题目1:有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. #程序源 ...

  3. python世界地图代码_[python] 几行代码也能玩转世界地图?

    前些天收到某位大佬的求助,说是需要给根据数据给安徽省地市来绘制个图,用不同颜色来直观表示数据.当时就想到了Python提供一个绘制地图的库-- Pyecharts. Pyecharts是一个用于生成e ...

  4. python 病毒 基因_#Python#提取基因对应的蛋白质名

    提取基因对应的蛋白质官方名 最开始,是需要将基因跟其编码的蛋白质对应起来,找遍了各种数据库都没发现有相关的注释文件,Uniprot作为处理蛋白质的大佬,结果里都有,肯定有办法能够满足需求. 搜索TP5 ...

  5. python keyboard模块_[python] PyMouse、PyKeyboard用python操作鼠标和键盘

    1.PyUserInput 简介 PyUserInput是一个使用python的跨平台的操作鼠标和键盘的模块,非常方便使用.支持的平台及依赖如下: Linux - Xlib Mac - Quartz, ...

  6. Python爬虫模拟浏览器的headers、cookie,爬取淘宝网商品信息

    一. 淘宝商品信息定向爬虫 二. 爬虫基础:正则表达式 三. 淘宝页面查看与分析 四. 爬虫源码 一. 淘宝商品信息定向爬虫 注意淘宝的robots.txt不允许任何爬虫爬取,我们只在技术层面探讨这一 ...

  7. python获取登录按钮_Python:Selenium模拟Chrome浏览器抓取淘宝商品信息

    对于采用异步加载技术的网页,有时候想通过逆向工程的方式来设计爬虫进行爬取会比较困难,因此,要想通过python获取异步加载数据往往可以使用Selenium模拟浏览器的方式来获取. Selenium是一 ...

  8. python计算数据百分比_概率计算:定义概率分布数据结构,Python实现概率分布计算...

    使用Python实现马尔科夫随机场.蒙特卡洛采样等随机过程算法的前提,就是用Python实现概率的计算.并不只是数值计算,而是能够将随机模拟中常用的各种概率相关的操作,都能用计算机的数据结构来表达,其 ...

  9. python数据结构题目_《数据结构与算法Python语言描述》习题第二章第三题(python版)...

    ADT Rational: #定义有理数的抽象数据类型 Rational(self, int num, int den) #构造有理数num/den +(self, Rational r2) #求出本 ...

最新文章

  1. 腾讯ARC、华中科大联合提出QueryInst,开启基于Query的实例分割新思路
  2. gnujaxp.jar与struts2中的xwork核心包冲突
  3. c++构造函数以及类中变量初始化顺序
  4. 嵌入式程序员面试时应该知道的16个问题
  5. ps2020的antlib文件在哪_ant design pro 新增页面
  6. python 异常_一文掌握 Python 异常处理的所有知识点
  7. Java中实现使用split方法分隔字符串
  8. Linux 守护进程创建原理及简易方法
  9. php 获取当月的阴历值,PHP计算节日、节气、农阳历互换的代码
  10. base64 string 放不下_String、byte[]、Base64相互转换,不要再用错了
  11. 如何在AD上重定向电脑加域后默认保存位置?
  12. #2013年Google官方技术求职大礼包#面试求职技巧篇
  13. 【WPS表格】快速填充数据的多种方法
  14. 前后端交互node服务器
  15. Kali linux 学习笔记(七十五)拒绝服务——teardrop 2020.4.15
  16. 【数据分析入门】R语言读写文本文件及RDATA文件
  17. Ubuntu子系统折腾记
  18. 【Kotlin开发者社区文章集锦】66篇精选技术精华文章
  19. Android秀翻天的操作——使用协程进行网络请求
  20. 1.21(0/1 Knapsack)

热门文章

  1. 初学python需要安装哪些-致Python初学者 Anaconda入门使用指南完整版
  2. mac屏保时钟_OneClock 不息屏的极简时钟,不仅仅是翻页时钟那么简单!
  3. android 代码添加图片不显示,Android开发 从代码里设置Drawable图片不显示的问题
  4. 太原理工大学自考计算机应用难,太原理工大学人工智能精彩试题+问题详解
  5. linux7给用户授权,CentOS7 添加新用户并授权
  6. c语言能让制表符空9个字符码,C语言编程规范 – 嗨!大佟!
  7. python 堆栈_利用Python列表实现堆栈(二):实现
  8. 【Windows】将notepad++添加到右键菜单中
  9. java数据库的量级_程序员学Python还是Java?分析了8张图后得出这个结论
  10. html大气网页模板,HTML蓝色大气形式扁平企业官网网页模板代码