数据库设计为1.5亿条记录。包含类别和子类别

时间:2016-02-10 09:03:12

标签: mysql database myisam

我需要一些MySQL数据库设计的帮助。 MySQL数据库每年应处理大约1.5亿条记录。我想使用myisam引擎。

数据结构:

  • 汽车品牌(> 500个品牌)
  • 每个汽车品牌都有30多种车型
  • 每个汽车型号都有相同的5个值,某些型号具有附加值
  • 每个值都有3个字段:
    • 时间戳
    • 质量
    • 实际值
  • 汽车品牌可以使用相同字段的某些值
  • 每5分钟跟踪一次数值 - > 105120年记录

关于数据:

  • 现场质量应始终保持良好状态'但是当它不是我需要知道的时候。
  • 字段时间戳通常是但是至少有一个值具有不同的时间戳
    • 偏离:1-60秒
    • 如果时间戳具有不同的时间戳,则它始终具有不同的时间戳
  • 有时我因为源服务器已关闭而无法获取数据。

我想如何使用

的数据
  • 图表中的可视化(时间和实际值)以及选择的值
  • 每个品牌的某些值的汇总

我的问题:

  1. 我认为将数据拆分成不同的表是个好主意,所以我把每个品牌放在一个额外的表中。为了按汽车品牌名称查找表格,我创建了一个索引表。这是一个好习惯吗?
  2. 为每个汽车模型(约1500个表)创建表格更好吗?
  3. 我应该存储质量(如果不是好的')以及时间戳在单独表格中的偏差吗?
  4. 还有其他建议吗?
  5. 实施例

    表:car_brand
    | car_brand | tablename | Address     |
    |-----------|-----------|-------------|
    | BMW       | bmw_table | the address |
    | ...       | ...       | ...         |
    
    表:bmw_table(105120 * 30 +车型=每年超过320万条记录)
    | car_model   | timestamp_usage     | quality_usage | usage | timestamp_fuel_consumed |  quality_usage |fuel_consumed | timestamp_fuel_consumed | quality_kilometer | kilometer | timestamp_revenue   | quality_revenue | revenue | ... |
    |-------------|---------------------|---------------|-------|-------------------------|----------------|--------------|-------------------------|-------------------|-----------|---------------------|-----------------|---------|-----|
    | Z4          | 2015-12-12 12:12:12 | good          | 5%    | 2015-12-12 12:12:12     | good           |  10.6        | 2015-12-12 12:11:54     | good              | 120       | null                | null            | null    | ... |
    | Z4          | 2015-12-12 12:17:12 | good          | 6%    | 2015-12-12 12:17:12     | good           |  12.6        | 2015-12-12 12:16:54     | good              | 125       | null                | null            | null    | ... |
    | brand_value | null                |null           | null  | null                    | null           | null         | null                    | null              | null      | 2015-12-12 12:17:12 | good            | 1000    | ... |
    | ...         | ...                 | ...           | ...   | ...                     | ...            | ...          | ...                     | ...               | ...       | ...                 | ...             | ...     | ... |
    
    和其他品牌表..

    修改:添加了查询和质量

    可能的查询

    注意:我假设表bmw_table有一个名为car_brand的额外列,而表名为simple_table而不是bmw_table,以降低复杂性。

    SELECT car_brand, sum(revenue), avg(usage) 
    FROM simple_table 
    WHERE timestamp_usage>=2015-10-01 00:00:00 AND timestamp_usage>=2015-10-31 23:59:59 
    GROUP BY car_brand;
    
    
    SELECT timestamp_usage,usage,revenue,fuel_consumed,kilometer 
    FROM simple_table 
    WHERE timestamp_usage>=2015-10-01 00:00:00 AND timestamp_usage>=2015-10-31 23:59:59;
    

    质量值

    我从OPC服务器收集数据,因此qualtiy字段包含以下值之一:

    bad
    badConfigurationError
    badNotConnected
    badDeviceFailure
    badSensorFailure
    badLastKnownValue
    badCommFailure
    badOutOfService
    badWaitingForInitialData
    uncertain
    uncertainLastUsableValue
    uncertainSensorNotAccurate
    uncertainEUExceeded
    uncertainSubNormal
    good
    goodLocalOverride
    

    提前致谢!

    Droider

1 个答案:

答案 0 :(得分:2)

每个品牌都有一个单独的表格。没有优势,只有不必要的复杂性。每个型号也不是1个表。通常,如果两个表看起来相同,则应将数据组合到一个表中。在您的示例中,该一个表将brandmodel作为列。

索引是您表现的朋友。让我们看一下您将要执行的查询,以便我们讨论最佳索引。

如果数据质量不佳,你会怎么做?只需显示" good"或者"不好"?