关于一个数据操作方案的咨询,谢谢

teleinfor 2015-06-09 05:39:16
有这样的一个需求,请各位达达看看,应该如何设计方案比较合理?
目标数据都是用户记录,对用户的行为进行分析。数据表:
tab_a -- 记录用户的活动类型1
tab_b -- 记录用户的活动类型2
tab_c -- 记录用户的活动类型3
现在根据tab_a中用户的一行数据记录,来从tab_b和tab_c中查找有否关联记录。如果有关联,则根据关联得到的信息更新tab_a对应记录。关联标识列都是tempid列,表都有时间列time。

规则:
1、针对一条记录,根据tab_a(tempid)从tab_b/c中查找对应时间前后3分钟的记录,如果存在则获取其location列,更新tab_a的location列。也就是说针对tab_a(tempid)的每一条记录,都有一个时间窗口3分钟来供查找是否有同样tempid的数据记录,如果有则获取找到的记录信息更新teb_a表。

数据量比较大,那么问题来了。我应该如何设计方案来做这个事情呢?在数据库里面通过procedure借助游标实现?还是另外编写一个app进程从数据库里面提取数据出来,分析后再把数据回填到数据库呢?

还请达达们指点,多谢了,这其实就是一个大数据的操作实例。对效率和方案合理性要有个基础思考和设计。
...全文
213 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-06-12
  • 打赏
  • 举报
回复
一次性对A更新需要读写所有记录,数据量摆在那里啊!
用触发器可以把这个工作平摊到日常中,虽然花费总时间更多,但是感觉不出来。
teleinfor 2015-06-11
  • 打赏
  • 举报
回复
引用 1 楼 Tiger_Zhao 的回复:
每个表都建这样一个索引:(tempid,time)包含(location)————tab_a 可以不包含。 可以用插入触发器实现: tab_a 插入:从 tab_b、tab_c 中去3分钟内的最新 location,更新到 tab_a.location。 tab_b 插入:直接把当前 location 更新到3分钟内的 tab_a 记录,反正不存在不会更新。 tab_c 插入:同 tab_b。
我今天做了一个实现,不过发现效率很低下,郁闷。。。我是利用游标从A提取所有数据,遍历A从B/C表查询每一条关联的记录,然后处理,再反过来UPDATE A中关联记录。效率很低下不能满足需要。
Tiger_Zhao 2015-06-10
  • 打赏
  • 举报
回复
每个表都建这样一个索引:(tempid,time)包含(location)————tab_a 可以不包含。
可以用插入触发器实现:
tab_a 插入:从 tab_b、tab_c 中去3分钟内的最新 location,更新到 tab_a.location。
tab_b 插入:直接把当前 location 更新到3分钟内的 tab_a 记录,反正不存在不会更新。
tab_c 插入:同 tab_b。

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧