【问题标题】:Is relational database the optimal data structure for me?关系数据库是我的最佳数据结构吗?
【发布时间】:2021-12-25 17:46:45
【问题描述】:

我将每周为大约 3000 万个实体跟踪几个不断变化的属性。被跟踪属性的值都是整数。

我无法决定如何以最佳方式存储它们。如果我创建第二个一对多表,在其中为每个属性输入一行,当观察到它时,我将创建 3000 万个实体 * 52 周 * 每年的属性条目数 .表格会变得很大,但我可以查询特定时期的表格,比较不同时期..

另一方面,我可以将每周数据点放入整数数组甚至字符串化对象中,其中所有属性都是键,被跟踪的整数是值,并为我的 3000 万个跟踪项目中的每一个指定一行不断修改.现在我无法直接在数据库中进行复杂的查询和比较,但我仍然可以提取特定项目的数据并显示它。我还不知道我想要进行的所有比较,但我想我希望至少能够检查最大的赢家或输家。

我应该满足于这些选项之一吗?我应该完全选择不同的数据库结构吗?为什么?我目前正在使用 MariaDB。如果我的示例过于人为,请将股票市场数据存储为最接近的类比,其中每个时间点(滴答)都必须存储特定股票的多个属性。

【问题讨论】:

    标签: database-design mariadb relational-database


    【解决方案1】:

    SQL 用于处理具有固定长度列的非常庞大的简单时间序列表,例如

    id        entity_id   property_id  datestamp    value
    BIGINT       INT          INT       DATETIME     appropriate type
    

    只要系统中出现属性更改,您只需在该表中插入一行即可。

    通过适当的索引,MySQL 或任何其他 RDBMS 可以毫不费力地处理大量此类数据。驱动器空间非常便宜,而且服务器的容量需要与访问它的程序数量相匹配,而不是它包含的历史数据量。所以不排除SQL。您的应用程序处于最佳状态。

    而且,使用 SQL 处理这些简单的行将比您建议的大对象读取-修改-写入方案更有效。该软件的编写、测试、故障排除和审计将更加简单。如果您投入生产,您将需要轻松完成所有这些事情。当你处理别人的钱时,它们很重要。

    而且,最新版本的 MariaDb 有一个 system versioning feature 用于值得研究的表。

    【讨论】:

    • 这是否意味着我可以在几年后处理一张有几十亿行的表格?我不需要永久存储数据,但需要几年的时间。
    • 这是个好问题。答案取决于您的查询模式。如果您有很多不受日期限制的查询,它们会随着您的表的增长而变慢。知道这一点:所有具有不断增长的数据库的应用程序,甚至您的应用程序,都需要定期检查和优化其性能。每个日历季度一次通常是明智的,如果您有幸获得高速增长,则更频繁。
    猜你喜欢
    • 2012-07-10
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多