由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 借人气问个SQL问题 (转载)
进入Programming版参与讨论
1 (共1页)
m****a
发帖数: 1
1
【 以下文字转载自 Joke 讨论区 】
发信人: mababa (能做996是一种巨大的福气), 信区: Joke
标 题: 借人气问个SQL问题
发信站: BBS 未名空间站 (Sat Mar 5 17:45:19 2022, 美东)
最近我需要实现一个功能来做大量SQL数据更新,鉴于本人的SQL知识非常有限,借宝地
问问有没有高手能指点一下。这个功能大体要实现的功能是这样的,数据库里有两组数
据具有相关性, 分别存在两个table里,一个叫parent, 一个叫child。child里的每个
row有若干个attribute,而parent里的每个row则有个filter。这个filter用来判断一个
child row和这个parent row是否有相关性。如果是的话,就会在第三张表,parent-
child-relationship里面插入一条row来标记这两个记录是相关的。
由于每个parent row的filter可以改变,那么当filter发生变动时,需要重新计算并更
新parent-child-relationship中这个parent row所有相关的 row。
目前的算法是,先在parent-child-relationship table中找到和这个parent row相关
的现有row的集合, 然后根据新的filter算出新的集合,之后找出旧集合中那些row不再
需要。接下来把不再需要的那些row 删掉,然后对新集合里所有row做upsert。
功能上来说,这样实现没有问题,但是从性能的角度考虑,这种实现是不是最优的?比
如说,可以把旧集合全部删掉,然后插入新集合,理论上来说,这样实现性能更好还是
更差?
如有大拿能指点一下,鄙人不胜感激。
y****w
发帖数: 3747
2
你最好把数据量的具体量级说具体些,拿点典型数据,这样看着清楚些。你的
relationship这个表看起来只是个视图,有没有必要弄成实体表跟你的打算怎么用这个
数据有关系。如果频率强度不高,一个view,考虑啥更新删除merge。
m****a
发帖数: 1
3
目前是billion数量级,慢慢会涨到tens of billions。用view需要join,性能应该会差
不少。

【在 y****w 的大作中提到】
: 你最好把数据量的具体量级说具体些,拿点典型数据,这样看着清楚些。你的
: relationship这个表看起来只是个视图,有没有必要弄成实体表跟你的打算怎么用这个
: 数据有关系。如果频率强度不高,一个view,考虑啥更新删除merge。

n****f
发帖数: 905
4

这种数据库的设计方式, 是值得商榷的。我个人认为, 应该从开始就应该考虑一种可
以持续发展的合理设计。
当然, 如果不能从新设计, Oracle, 有一种特殊的 materialized view 不知道中文
叫什么。
当主表更新的时候, 这个 materialized view 会自动更新。

【在 m****a 的大作中提到】
: 目前是billion数量级,慢慢会涨到tens of billions。用view需要join,性能应该会差
: 不少。

n****f
发帖数: 905
5

这个相关的实时更新的具体落实方式, 需要考虑从新设计。
否则, 随着数据量的逐渐增大, 会导致更新速度逐渐增加, 以至于无法持续下去。

【在 n****f 的大作中提到】
:
: 这种数据库的设计方式, 是值得商榷的。我个人认为, 应该从开始就应该考虑一种可
: 以持续发展的合理设计。
: 当然, 如果不能从新设计, Oracle, 有一种特殊的 materialized view 不知道中文
: 叫什么。
: 当主表更新的时候, 这个 materialized view 会自动更新。

1 (共1页)
进入Programming版参与讨论