【问题标题】:SQL Database Design for Test Data测试数据的 SQL 数据库设计
【发布时间】:2010-12-02 00:25:30
【问题描述】:

所以,我正在尝试学习如何建立良好且可用的数据库。我遇到了一个涉及正确存储大量数据的问题。我使用的数据库是 MSSQL 2008。例如:

我们每周测试大约 50,000 台设备。这些设备中的每一个都有大量与之相关的数据。总的来说,我们只是查看从原始数据计算得出的数据摘要。摘要很容易处理,它只是我试图输入数据库以备将来使用的原始数据,以防有人需要更多详细信息。

总结一下,我有一个数据库,其中包含每组 50,000 台设备的表。但是,每个设备都有类似这样的数据:

("DevID") I,V,P I,V,P I,V,P ...
("DevID") WL,P WL,P WL,P ...

第一行总共有 126 个(~882 个字符)数据点,第二行总共有 12000 个(~102,000 个字符)数据点。存储这些信息的最佳方式是什么?为每个设备创建一个表(这似乎不守规矩)?有没有可以处理这么多信息的数据类型?我只是不确定。

谢谢!

编辑:更新 ~char 计数和第二行数据点。

【问题讨论】:

    标签: sql database sql-server-2008 testing


    【解决方案1】:

    您可以将所有内容规范化到一张表中

    CREATE TABLE device
    (  id         BIGINT AUTO_INCREMENT PRIMARY KEY
    ,  DevID      INT
    ,  DataPoint  VARCHAR
    ,  INDEX(DevID))
    

    显然是伪代码,因为我不知道您的确切要求。

    【讨论】:

    • 我在想 varchar 但我有超过 54000 个字符用于第二行数据。我猜varchar只能容纳8000。
    • 每个字符都会出现在新记录中。所以对于第一个示例,I 将有 3 行,V 有 3 行,P 有 3 行。
    • 哦,我明白了!嗯,有趣...谢谢!
    【解决方案2】:

    这些数据是否代表一段时间内的一系列读数?时间序列数据往往具有高度重复性。因此,一种常见的策略是以避免存储每个值的方式对其进行压缩。例如使用run-length encoding,或者将时间间隔与每个值而不是单个点相关联。

    【讨论】:

    • 它们不是随时间推移的读数。它们是当前范围内的读数。即 1mA、2mA、3mA。如果有相似的值,这将起作用,但它们都是不同的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2010-09-06
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多