为什么你们要把 sql 当 nosql 用?

2021-04-08 19:00:21 +08:00
 iseki

sql 的好处一点没沾着,坑全要踩一遍,传统 dbms 这么多功能就用了个事务,有人可能还不注意用不对…

9027 次点击
所在节点   NoSQL
64 条回复
Maboroshii
2021-04-08 19:03:37 +08:00
那楼主能分享下在项目中用了关系数据库的哪些好处呢
neoblackcap
2021-04-08 19:05:50 +08:00
@Maboroshii 事务,联表查询,SQL 语法,维护简单
iseki
2021-04-08 19:07:37 +08:00
@Maboroshii 既然用不上 /用不了,那干脆就别用啊,非抱着 dbms,啥特性也不敢用,最后性能还是不够了得分库分表……折腾了有点
wangyanrui
2021-04-08 19:11:20 +08:00
因为相对来说,这玩意大家掌握的更好一丢丢
totoro52
2021-04-08 19:20:00 +08:00
不结合业务场景说这些太耍流氓了
xiangyuecn
2021-04-08 19:41:19 +08:00
占楼问一下,java,spring 的 @Component 组件实现类的成员函数里面,怎么拿到当前调用本方法的 spring 代理对象? this 肯定不能用的🐶

@Transactional 注解对小白来讲,说好听点就是真省事,说难听点就是反人类

目前我为了保证需要事务环境的方法一定可以开启事务,函数里面强制检查了一遍是否是在事务环境里面;当不需要事务的方法里面调用同一个类里面另一个会新开事务的方法,不需要事务的这个方法我就加一个 self 参数(当前类的接口类型,就是谁调的这个方法就把谁传进来),通过 self 来调用新开事务的方法,多加这个参数仅仅是为了获取代理对象,太难受了,人家的文档又看不懂😂

应该会有一个什么 SpingXXXUtils.currentBean() 之类的东西可以拿到当前这个类接口的代理对象吧,可惜我太菜🐶

求指点,指指点点也行
iseki
2021-04-08 19:44:37 +08:00
@totoro52 u1s1,qs
iseki
2021-04-08 19:47:37 +08:00
@xiangyuecn 自己注入自己试试
xiangyuecn
2021-04-08 19:50:32 +08:00
@iseki #8,没试过,下次试一下,原来还可以这样玩😁
fkdog
2021-04-08 19:53:19 +08:00
@xiangyuecn 解决的路子不对。
针对事务嵌套事务的处理,spring 有专门的事务传播机制可以选择。
可以在 @Transactional 注解里设置传播机制。
xiangyuecn
2021-04-08 20:01:59 +08:00
@fkdog #10 跟传播不传播好像没有关系,代理对象上调用方法,和 this 调用方法,区别可不是一点。

当你发现 @Transactional 注解的新事务没有开启,应该回滚的被提交,应该提交的被回滚,那就会很奇怪。

最终还是注解的锅,脱离了代理对象,注解不一定能被 spring 处理;如果手动控制事务,想开启开启,想提交提交,想回滚回滚,只要没有提交就是回滚,这些问题都可以避免。用注解来实现事务管理真不是一个好的想法,只能说是省事

可惜手动控制事务,代码繁琐,浪费生命
vencent
2021-04-08 20:23:41 +08:00
因为非 RDBMS 公司没人维护基础架构,所以。。。
Jooooooooo
2021-04-08 20:37:34 +08:00
mysql 运维成熟, 稳定性高.
ychost
2021-04-08 20:39:30 +08:00
@xiangyuecn AspectJ 的的 Gglib 模式 this 和 代理对象就一样了,在 EnableAspectJAutoProxy. proxyTargetClass 开启
xuanbg
2021-04-08 20:39:36 +08:00
@xiangyuecn @Transactional 注解需要注意的就是调用的方法不要在同一个类,另外就是不要被同样有 @Transactional 注解的类调用或调用 @Transactional 的方法。这应该很容易做到
ychost
2021-04-08 20:40:44 +08:00
用其它数据库出了问题都找不到答案,用 RDBMS 资料这块至少很多,而且也提供 JSON 的支持
xuanbg
2021-04-08 20:43:47 +08:00
@iseki 我也很好奇那些怕性能问题不用 join 的,为啥不干脆用 nosql 算了。。。关系型数据库就是要联表的呀,不联表查询哪来的关系?不存在关系用的哪门子 sql ?
geekboy
2021-04-08 20:52:19 +08:00
@xuanbg 不是不用 join,是不要 join 太多表,join 大表要建好索引,性能问题当然要引起重视。
CRVV
2021-04-08 20:54:55 +08:00
原因之一是关系型数据库本身更可靠或者性能更好。

比如性能比较。当然这公司是搞 PostgreSQL 的,结果可能有偏差。
https://www.enterprisedb.com/blog/comparison-mongodb-vs-postgresql

PostgreSQL 更可靠应该没什么悬念。
ReferenceE
2021-04-08 20:56:18 +08:00
Transaction 不就一个要么不执行,要么全部执行么

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/769160

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX