木匠的微型博客 Charlie Twitter

    follow me on Twitter

    Thursday, March 05, 2009

    Skip unchanged columns when UPDATE时,如何跳过没有改动的列

    现在很难在 AskTom 提新的问题了.
    只好找个类似的问题,然后跟贴评论,问一个新问题. 但是一定要和原帖主要问题紧密相关,不然,Tom兄会毫不留情的删掉你的评论. 嘻嘻.

    好了,我的问题是:
    http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1524420700346152252

    先简述一下业务逻辑, 我们的业务模式类似eBay, B2C, 我们的主要商品是图书, table book, 书商每天上传文件更新他们的库存.
    书商不管三七二十一,送上所有图书的信息,无论是要改动的属性,还是不需要改动的属性.
    大部分情况只是改动一两个短列,比如数量,单价,ISBN;少部分情况修改长列,比如书名,作者,出版社,图书简介...等等.
    这就产生了一个重复(冗余)修改的问题,会浪费PGA内存,产生十倍之多的Redo/Undo.

    如何跳过这些没有修改的列呢?

    今天耗费了一整天跟Tom兄切磋.

    我设计的解决方案都在上面链接里面了. 还没有最后成形,处在演变进化(evolution)当中.

    对了, 我的署名是Charlie MuJiang from Victoria, BC Canada, AskTom不能存中文,所以用拼音MuJiang.


    再来一个维多利亚的BC省议会大楼,2005年我刚到维多利亚时,住的公寓走到议会大楼不到十分钟,每周过来散步数次.

    3 comments:

    yumianfeilong said...

    晴朗的照片还有异国的建造风格比Oracle好看多了。

    丁原 said...

    我们也存在这个问题,也在考虑怎么解决,不过先去考虑是否能减少更新。

    1 木匠 said...

    To yumianfeilong,
    是呀,两者结合岂不更妙!
    我一直在追寻一个风景优美,宁静,没有喧嚣的地方,工作,生活,开发软件.

    看来技术贴里放照片容易转移视线,以后尽量在生活贴里加照片.

    To 丁原,

    对呀,数据库设计讲究大局观,不错过每一个环节.
    可以在文本文件预处理这一层,过滤掉重复的记录.
    然后,接上数据库,修改数据之前,至少需要一次数据库查询做比较,过滤掉更多的重复记录.

    亚马逊强制要求书商提供物品号;我们比较惨,好多书商不提供物品号,只好比较几乎所有列,看看匹配了没有,决定是新增还是更新.

    十年转了一大圈,我又转回数据库开发了,更能体现创造力,更大发挥空间.