|
关于数据仓库的历史数据作者:onesday 20070118 数据仓库中需要包含历史信息和当前信息,比如一个全球通用户C,之前使用了套餐P1,那么生产系统中就会有一条客户C使用套餐P1的记录R(C,P1),数据仓-库也会取到这条记录。现在该用户C把套餐P1改成套餐P2,那么生产系统中就会把原来的记录改成客户C使用套餐P2的记录R(C,P2),数据仓库从生产系统取-数据的时候,如何处理呢? 我觉得有2种处理方法: 方法1比较直观,但是_update操作可能有效率问题,尤其是数据量很大的时候。 在实际项目中,会怎么处理呢? 作者:shiming 20070118 请查阅Kimball的 the datawarehouse toolkit - slowly changing dimension 一句话,为每条记录增加一个起始日和终止日,对当前纪录可以使用特殊终止日作为标记。 作者:onesday 20070119 使用特殊终止日,其实就是采用第一种方法,_update R(C,P1),使用时间戳作为删除标识。 作者:Qing 20070119 至于性能,可能不同的数据库有不同的处理方法吧,倒不是非常清楚了。我们用的是Teradata,这点倒没见什么问题。 作者:shiming 20070119 我认为可以想象它是一种transaction,当更换套餐事件发生时,插入新的纪录,同时更新user dimension中的当前套餐外键,至于是否更新原纪录就取决于更新效率和查询效率间的平衡了。 作者:onesday 20070119 to shiming: to Qing: 说是在数据仓库中对记录直接_update的效率还不如先_delete,然后_insert的效率。 感觉不可思议。 作者:shiming 20070119 呵呵,这样的话是mini dimension了,在事实表中同时记录用户和套餐信息。 那个"奇怪"说法,会不会是指如果_delete的依据是一个clustered index,那么就不用去到data page,因此比_update高效,但_insert本身还是要去data page的呀~或者能够保证新_insert的排在后面?随便猜猜~ 作者:人虫 20070119 对上面的理解,我提下我自己的看法,假如说客户这个月换了套餐,下个月又换了其他的了,这样就不是什么缓慢变化维能处理的了, 像这样的情况,如果是不能循环变得情况,就如上面的,一种套餐只能有一次的话,可以采用加时间来处理。 责编:姜玲 微信扫一扫实时了解行业动态 微信扫一扫分享本文给好友 著作权声明:畅享网文章著作权分属畅享网、网友和合作伙伴,部分非原创文章作者信息可能有所缺失,如需补充或修改请与我们联系,工作人员会在1个工作日内配合处理。 |
热门博文 |
|