为什么你们要把 sql 当 nosql 用?
sql 的好处一点没沾着,坑全要踩一遍,传统 dbms 这么多功能就用了个事务,有人可能还不注意用不对…
sql 的好处一点没沾着,坑全要踩一遍,传统 dbms 这么多功能就用了个事务,有人可能还不注意用不对…
当你发现 @Transactional 注解的新事务没有开启,应该回滚的被提交,应该提交的被回滚,那就会很奇怪。
最终还是注解的锅,脱离了代理对象,注解不一定能被 spring 处理;如果手动控制事务,想开启开启,想提交提交,想回滚回滚,只要没有提交就是回滚,这些问题都可以避免。用注解来实现事务管理真不是一个好的想法,只能说是省事
可惜手动控制事务,代码繁琐,浪费生命
比如性能比较。当然这公司是搞 PostgreSQL 的,结果可能有偏差。
https://www.enterprisedb.com/blog/comparison-mongodb-vs-postgresql
PostgreSQL 更可靠应该没什么悬念。
某一个 Service 提供 findByName 方法,findByName 出于某种原因里边有个需求,如果没有查询到某个 Name,那么就创建一条这样的记录,也就是说 findByName 需要调用同 service 下的 create 方法。但是由于通过 this.create 方法,是没有走 spring 的事务增强的,那么很容易导致问题。那么你的解决思路是通过 Spring 的 AopUtils 来获取 this 在 spring 容器中增强过的 bean 。
你的这个想法的确是可以解决你的需求,但是这不是一个好的解决思路。
我更倾向于 findByName 和 create 方法在某一层进行聚合,而不是在 findByName 里调用 create 方法。或者你不想加入聚合层,你可以直接在 Sevice 创建一个新方法 findOrCreat()来聚合这两个 findByName 和 create 方法,然后你在 findOrCreat 上边打上 @Transactional 注释来控制内部嵌套事务的传播性,方便你更细粒度的处理事务提交和回滚。而且 findByName 能更好的专注于方法名所提供的功能,因为其他人去调用你的 findByName 时他们是不清楚你里边还有调用了 create 方法,玩意他们调用了然后创新了一条新纪录可能也不是他们自己的本意。
https://www.v2ex.com/t/762196
除了使用 sql 预留字段或者 json,请问上面这需求还有什么解决办法?
大概有一点可以确定,主想用 nosql 替代 sql 。不要有这样的想法,会很惨的。第一,nosql 虽然叫 nosql,但它真得不是 sql 的反义词,而是补充( RDBMS 的反义词是 ODBMS,这玩意有人尝试过,至今没有成功)。第二,事务,还真是具有一票否决权,目前只有 RDBMS 能够在性能期望内完全满足事务的所有原则。
最后再提醒一下,分库分表,这可是实实在在面向对象领域的事,sql 是实现它而不是决定它,你就算换了 ODBMS 或者全部使用 nosql,也是避免不了的。
@BeautifulSoap 我先盲猜一个图数据库和一个 redis (
不过,我觉得这不是数据库的事儿。
实在遭不住再换 Cassandra 之类暴力的,运维操蛋。
至于分库分表,现在还有这么搞的? OLTP 就直接用 tidb 啊…
如果 mysql 的优势只是在事务的话,那应该有机会被取代的。