Soft_Job 板


LINE

各位大大好 小弟是一间小公司里 负责部分核心业务的软体工程师 为了日益多样的客群,被安排要规划新的设计 程式语言使用的是Java,资料库是Postgres 框架使用了Hibernate及Spring data JPA 有天CTO跟我说想到了个好方法 要把核心业务中 原本关系为多对一的A Table 与B Table 改为多对多关系 并把Key直接用String Array Type 储存在A Table的某个新栏位里 这样一来就有很大的弹性 小弟做了一些功课 向CTO表达了应该加关系表正规化的想法 但CTO不满意,觉得关系表很多余 小弟又用String Array Type 在Java世界里 并没有完整支援为理由尝试说服 CTO却觉得这些都是可以克服的问题... 小弟认为一但使用String Array Type 并且不使用关系表 就很有可能要全部走Native SQL 日後无论延展需求或维护都会相当痛苦 为此非常苦恼 因为核心业务的复杂程度 小弟希望可以降低日後的维护门槛 想询问各位大大 String Array Type的问题 真的有这麽好克服吗? 或是有什麽更好的说服理由是小弟没想到的? 这是小弟首次於软体版发文 感谢耐心看完的大大们,献上万分的谢意 ---- Sent from BePTT on my Samsung SM-A528B --
QR Code



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 42.70.45.29 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1669982247.A.465.html
1F:推 chuegou: 我的建议是不要怕留下技术债 还债的不一定是你 12/02 20:23
2F:推 chen09885: 实际上正规化後各种限制也是问题 12/02 20:51
3F:推 abccbaandy: 推1F,怕什麽,你这专案成功了就丢给菜鸟维护了 12/02 21:13
4F:→ abccbaandy: 还能嘴他需求做太慢,你当年XX一天就好 12/02 21:14
5F:推 CRPKT: 你们业务逻辑里有没有需要从 B 反查 A? 12/02 21:20
6F:→ internetms52: CRPKT大大您好,主要的逻辑都是从B向A来查询的,是 12/02 21:37
7F:→ internetms52: 为了多个B对多个A才这样做的,因为1B对多A的关系不 12/02 21:37
8F:→ internetms52: 够用 12/02 21:37
9F:→ neo5277: 存json字串 或是乾脆nosql 12/02 22:08
10F:推 jack0204: 关系表是有必要的,也可以用NOSQL,或是快逃 12/02 23:01
11F:推 jack0204: 不过根据主要业务来评估比较好,如果不频繁的话都行 12/02 23:07
12F:推 SHANGOYANYI: 需要这麽厚工喔? 一个基本多对多的表是难在哪?XD 12/03 00:37
13F:→ alan3100: 不就一个mapping table就搞定是难在哪 12/03 01:05
14F:→ alan3100: pk:id,A_pk,B_pk,isValid,modifyDate 12/03 01:09
15F:→ alan3100: string array或nosql 你都还是要面对是否要强一致性问题 12/03 01:11
16F:→ ssccg: 你是要问怎样比较好,还是怎麽说服你家CTO.. 12/03 01:37
17F:→ ssccg: 如果要表达关系的话,关系表才是最简单又有弹性的,存个 12/03 01:46
18F:→ ssccg: array除了不开新table外,既没好处也没什麽很大的弹性啊 12/03 01:47
19F:→ internetms52: CTO的沟通部分也许跟软体不太有关,若觉得奇怪就留 12/03 07:16
20F:→ internetms52: 给小弟我自己解决就可以了,大大们就分享想分享的 12/03 07:16
21F:→ internetms52: 部分就好,谢谢各位大大的回覆 12/03 07:16
22F:推 Jichang: 有些情况是不太想用 join 两种方法各有优缺 有json type 12/03 08:15
23F:→ Jichang: 可以用 12/03 08:15
24F:→ brucetu: 读写比例 预估资料总笔数 峰值流量 日常流量 12/03 12:35
25F:→ brucetu: 这些都会影响你要用哪种方式实作 12/03 12:36
26F:→ brucetu: 但有一个很简单的准则就是 如果你小公司 流量小 12/03 12:36
27F:→ brucetu: 就用写code最快的方式让memory去扛一切的问题 12/03 12:36
28F:→ brucetu: 你家CTO提出的办法基本上就是写code最快最懒的方法 12/03 12:38
29F:→ brucetu: 也就是最省成本 12/03 12:38
30F:→ brucetu: 建议你就做 万一效能爆炸 增加硬体成本 责任不在你 12/03 12:39
31F:推 SHANGOYANYI: 真的照你家CTO那想法做 那以後资料层问题是dev负责 12/03 13:24
32F:→ SHANGOYANYI: 还是dba负责? 12/03 13:24
33F:→ Firstshadow: 这种可以当CTO==? 12/03 13:51
34F:→ HKCs: 用json/jsonb吧 反正他提出来的 出事就叫他自己去跟老板/客 12/03 14:22
35F:→ HKCs: 户解释 12/03 14:22
36F:推 OriginStar: stackoverflow也有人问类似的问题,也有人提出解决 12/03 14:37
37F:→ OriginStar: 方法,所以技术上不是问题,CTO则是考量公司营运未来 12/03 14:38
38F:→ OriginStar: 所以所预先的规划,即使原PO不做也会找别人做,当然 12/03 14:40
39F:→ OriginStar: 原PO不在意升迁、加薪、年终的话说自己不想负责这块 12/03 14:41
40F:→ OriginStar: 看能不能请其他同事负责也行 12/03 14:41
41F:推 s06yji3: 又不是什麽违背良心的事情XD 12/03 14:52
42F:推 hobnob: CTO不都是自家公司随便喊的吗。原PO就照做就好,不必争论 12/03 17:18
43F:→ hobnob: ,未来自己当CTO之後就可以做借镜了 12/03 17:18
44F:推 marc47: 如果只有几十万笔资料,爱怎麽变就让他变,如果是几千万笔 12/04 00:45
45F:→ marc47: 以上,要三思,pg的sql analyze很笨,更何况还要用array去 12/04 00:45
46F:→ marc47: 拆,及做关联,explain你看看cost可能都是full table scan 12/04 00:45
47F:→ marc47: ,cost可能就吓死人 12/04 00:45
48F:→ ssccg: 那方法怎麽会写code最快最懒,原po都说了用jpa hibernate 12/04 03:53
49F:→ ssccg: 关系表直接@ManyToMany就完了,array一定要用postgres的 12/04 03:54
50F:→ ssccg: native sql去写,哪里省了 12/04 03:54
51F:→ ssccg: 好像有不少人包括一楼说技术债都以为是在说CTO提了个方便快 12/04 03:59
52F:→ ssccg: 速的方法,不是吧这篇明明是在抱怨CTO提了个程式就比较难写 12/04 03:59
53F:→ ssccg: 又不合常规、但也说不出哪里好(只说就有很大的弹性、关系表 12/04 04:00
54F:→ ssccg: 多余),然後也没什麽目的只为了少开个多余(?)table 12/04 04:01
55F:→ ssccg: 当然实际上也许CTO是有什麽考量,但显然原PO没接收到 12/04 04:03
56F:嘘 pttano: 可怜喔,烂CTO搭配junior ,真是一绝 12/04 09:44
57F:推 ppc: 一楼精辟 12/04 13:47
58F:→ superpandal: 一楼三楼是在自爆自己的为人吗? XD 不过一堆没讲的都 12/05 18:50
59F:→ superpandal: 是这样 环境真的不好 12/05 18:50
60F:→ superpandal: 言归正传 解法楼上都有人说了 用json postgres可提取 12/05 18:56
61F:→ superpandal: json内的值 或者你取出来反序列化也可以 如果了解 12/05 18:58
62F:→ superpandal: json本质 会觉得这格式很不错 12/05 18:59
63F:→ superpandal: postgres有一些json_为前缀的函数 12/05 19:02
64F:推 come: 资料量不大或者存取不频繁就会以可维护性来考量。 12/05 22:22
65F:→ come: 或者说追求一致。但是一旦资料量大,就要考虑join成本。 12/05 22:23
66F:→ come: 这个时候就会认真考虑用json了 12/05 22:24
67F:→ come: jsonb是解multi-value的好工具 12/05 22:24
68F:推 answermangtr: CTO CIO多的是 不是技术出身的咖 看多了啦 12/06 00:38
69F:推 Killercat: 问他为啥要过度设计 有没有有潜在的需求 12/08 08:00
70F:→ Killercat: 会不会沟通这些东西往往就是junior senior的差别 12/08 08:01
71F:推 BigCockman: 还好吧 反正规化的一种而已 做正规化不等於比较好维 12/08 10:53
72F:→ BigCockman: 护跟扩展 坦白说硬要正规化是有点过时的想法了 12/08 10:53
73F:→ superpandal: 这不是过度设计 是实作方式不同 一致性与灵活性是可 12/08 19:41
74F:→ superpandal: 以兼得的 但市面上多半都是看到一致性强但改个小功能 12/08 19:42
75F:→ superpandal: 就很累的东西 12/08 19:43
76F:→ superpandal: 框架会加强一致性但也会缩限应用 巨无霸框架是灾难 12/08 19:46







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP