在MySQL中存储大量数据?

时间:2010-11-28 16:08:02

标签: php mysql database storage product

我正在尝试在MySQL中创建一个DB表来存储我的产品统计数据。几乎每一天的统计数据都应该在数据库中。问题是速度。

目前,我正在为每种产品存储以下值: TIME,已售出商品,PRODUCT_ID,HIT,OTHER_ID

我想到了两种不同的存储数据的方法:

  • 连续每个产品的日复一日(序列化)
  • 连续每个产品逐年(序列化)

或您的想法?

速度测试我没有那么糟糕,差不多好。但是你对这个问题有更好的想法或经验吗?

3 个答案:

答案 0 :(得分:6)

确实取决于您的报告需求 - 即,如果您仅按产品/日报告,则将事务统计信息作为批处理过程的一部分滚动到汇总表中是有意义的。

在任何情况下,我都建议将您的交易数据和报告数据分离到一个单独的数据库中,这样您就可以优化您的事务数据以进行写入,并优化您的报告数据库以进行读取(并且可以执行大型报告而不会破坏您的交易处理能力)。

答案 1 :(得分:1)

我假设您仅将数据库用于静态数据,而不是将事务存储在首位的“实时”数据库。

可能会出现速度问题:

  • 将数据插入数据库时​​
  • 查询数据库时(即从Web应用程序中)

让您的数据库专门用于统计数据,开始设计您想要生成的报告是明智之举;通过这种方式,您可以定义:

  • 您必须插入数据库的数据
  • 您要对数据库执行的查询

在Excel中绘制草图(但您可以使用任何工具)并使用虚假数据填充报表是了解您想要实施的内容的良好开端。

当您对结果感到满意时,您可以识别挤入数据库所需的数据,您必须实施的查询以及您希望为用户提供的报告的互动,如果有的话。

如何使用数据填充数据库

  1. 首先,您可能拥有大量详细的数据,例如描述购买的行。开始查找报告中实际有用的维度;维度是您关注的一项衡量标准,例如您已售出的何时最初销售它。
  2. 对于每个维度,找到您要在报告中使用的最小细节级别:您是否关心购买的时间,或仅关注年份?您是否关心所售产品的类别或仅关注其SKU?
  3. 这将告诉您必须从原始数据库传输到统计数据的数据。

    如何使您的数据保持最新

    这很大程度上取决于您希望更新统计信息的频率。您可以设置一个触发器来实时更新您的统计数据库,或者定期运行脚本来升级您的统计数据库。

    备注

    1. 每当原始数据库在其架构中更改,或者更精细地存储数据时,您必须考虑这些更改对更新过程的影响(触发器或外部脚本)
    2. 如果您的统计信息有某些互动(例如来自网络应用程序),我建议使用Data Cubes来定义您的统计数据db。
    3. 请记住,您无法轻松地对序列化数据进行排序,选择或分组。

答案 2 :(得分:1)

将问题作为数据仓库/数据集市解决方案(星形/雪花模式)进行处理,其中包含汇总(聚合/物化视图),如表格,以便将复杂的长时间运行查询减少为更快的简单选择语句。

建议批量加载数据到临时(临时)架构,清理,验证和映射它,然后填充事实和维度表:)