Saturday, January 31, 2015

从争论中的一点思考

http://www.mitbbs.com/article_t/Programming/31398465.html

发信人: neosky11 (neosky11), 信区: Programming
标  题: 从争论中的一点思考
发信站: BBS 未名空间站 (Sat Jan 31 15:24:35 2015, 美东)

我真没想到还在争12306这个话题,其中一个核心是关于transaction
由于自己的一些经验,我很容易理解好虫的方案,当然可能也是四平八稳,也没什么惊
喜。另外一些人的方案是跳出框架的约束,重新思考问题的本质,将商业逻辑抽象。我
没有能力判断两者的可行和好坏。
我自己也一直没法真正理解transaction这个问题,我尝试去读《Java Transaction
Design Strategies》这本书,但是说实在,我看不懂这本书,虽然很多人说这本书已
经是最好,最容易理解。
似乎从一开始我们接受了关系型数据库天生的解决方案,生来就有外键,需要关联,需
要transaction,没有我们就不知道该怎么办。很多时候我们想优化,都说因为这个那
个约束,最后说是瓶颈,没法解决。我们经常被DBA这样忽悠。
关系型数据库出现的时候,很多人可能都没出生,有时候我们也不知道为什么今天发展
到这个情况
最近我接触了MongoDB,相信现在很多人都接触过了,它就是把传统RDBMS传统一套抛弃
,重新获得解放,在一些情况下非常好用。它目前已经不支持document(类似table)
之间的transaction,意思就是如果你想更新一个表,同时又想更新第二个表的时候,
你不能将两个操作作为All or nothing进行处理。
如果你需要,就只能自己去实现。
它这里解释了怎么用transaction最经典的例子来做解释,只是由A账户转账100到B账户
,怎么实现这个需求。
这里很详细实现了用一个额外的document(table)去记录怎么two phase commit,怎么
rollback
http://docs.mongodb.org/manual/tutorial/perform-two-phase-commi
可以看出来已经很复杂


No comments:

Post a Comment