【问题标题】:MySQL JSON datatype to store historical priceMySQL JSON 数据类型存储历史价格
【发布时间】:2016-11-19 11:53:17
【问题描述】:

我正在考虑使用 JSON 数据类型在 MySQL 5.7+ 中保存历史数据价格的可能解决方案,而不是为每个历史价格添加新行。

案例描述: 我有一张名为“产品”的产品当前价格和产品描述表。产品价格可能会在几天后发生变化,我想使用 JSON 数组保存历史价格变化:

JSON 基础结构:

 PriceChangeDate (date)
 PriceChanged (float)
 PromoType (tinyint) 
 PromoDesc (nvarchar(50))

我们的想法是将历史数据保存到一个名为“HistoricalProductPrices”的单独表中,其中包括 ProductID、(与“Products”表的关系)、DateCreated 和带有我描述的字段的 ProductID 历史价格的 JSON 数据类型。

在某些情况下,我需要产品的完整数据历史记录,因此我只需获取整个 JSON 并显示以供报告。有时我需要一个特定的日期或产品历史价格范围,所以我想我只会从 JSON 中获取历史数据并寻找神化的“PriceChangeDate”。 这也可以让我节省大量的日常插入,相反我需要使用产品的新数据更新 JSON。

你们如何看待这种保存历史数据的方法?

【问题讨论】:

  • 不,我不明白你为什么要这么做。只存储日期和价格有什么问题?
  • 我说的是价格每天都在变化的情况,我需要保存带有变化日期的历史价格。
  • 为什么一定要json。您可以,只需尝试 5.7 即可。我不会。主要是因为我确信它的扩展性也不会那么好,而且可调整性也较小。但是去吧。
  • 只是在寻找一种能够将每个新的价格变化保存在同一行中而不是每次价格变化都创建一个新行的方法。它可能是 JSON 或其他什么?
  • 是的。我也是。每次都换新行有什么问题?

标签: mysql mysql-json


【解决方案1】:

你问:

你们如何看待这种保存历史数据的方法?

恕我直言,我认为这是一个糟糕的主意。如果您使用 MySQL 或任何其他 RDMS 执行此操作,则必须处理您的代码的下一个人将钉在一个看起来像您的木偶上。认真的。

为新事件(如股票交易)或新日子添加新行是 RDMS 的工作。他们确实做得很好。

SQL 数据库的全部意义在于允许快速更新、搜索和聚合多列中的数据。 RDMS 系统可以毫不费力地存储和搜索数百万行数据。将多条记录放在一个 BLOB 中就是要打败所有的搜索技术。

如果您真的想使用 JSON 文档进行存储,您可能需要研究 MongoDB。它具有在一些 JSON 文档中工作的索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-16
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    相关资源
    最近更新 更多