【问题标题】:Storing processed results of connection in RDBMS将处理后的连接结果存储在 RDBMS 中
【发布时间】:2022-01-19 09:29:38
【问题描述】:

一个 csv 文件包含以下两列:admission_number、project_name。 两个实体之间的关系是多对多关系:一个特定的 admission_number 可以用于多个项目。一个特定的项目可能有多个admission_number。

数据将如下所示,最初有“1000 百万”行,并且该表中的数据将每天更新,将达到 1300 百万行。

admission_number,project_name
1234567890,ABC1234567
1234567890,ABC1234568
1234567891,ABC1234569
1234567892,ABC1234569
1234567893,ABC1234570
1234567894,ABC1234567
1234567895,ABC1234567

对于特定的录取编号(比如说 1234567890),我想知道所有从事相同项目的录取编号(ABC1234567,ABC1234568)。上述查询的输出将是 1234567894,1234567895。

解释:由于录取编号为“1234567890”,项目名称为“ABC1234567”和“ABC1234568”。在这两个项目中,其他“admission_number”的工作方式为“1234567894”、“1234567895”

我想出了两个解决方案,要存储数据,将使用 RDBMS。

方法 1:使用两个检索查询:第一个查询应返回特定“admission_number”的所有项目名称,第二个查询将返回“项目名称”的所有 admission_number。

select admission_number from table where project_name IN (select project_name from table where admission_number='ABC1234567'.

方法 2:在这种方法中,在加载之前,我会预处理结果,直接将结果存储在数据库中。我只存储所有连接的“admission_number”。

例如。对于 project_name 'ABC1234567',这 3 个 admission_number '1234567890'、'1234567894'、'1234567895' 正在工作。我想将所有连接的 admission_number 存储在具有两列(number,connected_number)的表中,例如('1234567890','1234567894'),('1234567890','1234567895'),('1234567894','1234567895'),并查询将适用于两列(number 和 connected_number)。

但是在这种方法中会有很多行意味着如果一个特定的 project_name 'p',有 n 'admission_number' 比总行数将是 n(n-1)/2

如何将所有连接的 admission_number 存储在 RDBMS 中?数据加载可能很慢,但检索应该很快。

【问题讨论】:

    标签: database data-structures rdbms


    【解决方案1】:

    不要优化数据结构。它只会引起问题。

    创建一个简单的表,其中包含两列 ID 和 create index 两列。

    RDBMS 将构建和维护an index 的列值,这将实现对特定记录的快速查找。

    【讨论】:

    • @Juraj...为了防止重复插入,我正在为两列创建主键。我正在“admission_number”上创建索引,并在“project_name”上创建范围分区。 'project_name' 将是具有 10 位值的 bigint 值(最大值:3*e9)..可以吗?
    • @user752590,您可以为两列创建唯一索引,因此不需要序列号。是的,对 project_name 进行分区是个好主意。我没有在答案中提到它,因为并非所有 RDMBS 都支持它。关键是您可以微调 RDBMS 设置而不会使数据结构复杂化。
    • @user752590 或将这对列设置为主键。我们为像这样的 N:N 关联表这样做
    猜你喜欢
    • 2015-06-19
    • 1970-01-01
    • 2021-10-10
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    相关资源
    最近更新 更多