
获得徽章 8
- 前几天一个开发通知问我,他说为啥我们开发中不推荐在MySQL使用Json类型格式存储数据?
我是这么思考的,首先是Json类型的优点,它不用为数据中的每一个Key值新建一个字段,并且可以任意增删字段而无需修改数据表结构,甚至可以减少数据表的设计,其次使用Json数据类型冗余数据可以减少数据表的查询,减少关联查询,降低服务器的压力。
其次Json数据类型的缺点,如果一定要使用Json数据类型最好只存储用于纯展示的数据,如果把它用于查询条件或者更新条件它的效率是很低的并且很难优化,同时很难对Value值类型和长度进行验证,并且它还不支持非null默认值,像唯一索引、查询索引优化、外键关联查询、运算符查询等这些也都是Json中Key无法做到的。
最后,总结如下:
1、不建议在数据库中使用Json数据类型,如果因为字段不确定,任意性强,可以将数据存放在非关系型数据库,如MongoDB/Redis。
2、如果使用Json数据类型保存数据,需确保该数据仅仅用作展示,如果涉及条件查询、更新等操作请不要使用Json数据类型。
3、经常使用的字段建议也不要使用Json类型,即使不被用作查询条件。展开等人赞过26 - 前几天,一个开发同事问我,他说作为程序员有必要去参加考软考吗?
他所说的软考指的是软件设计师中级考试,我认为这个证是有必要去考的。
就以中级科目中的软件设计师为例,软件设计师中级科目中的考试内容和程序员日常开发使用技术内容最接近了,总共10多个知识考点,涉及计算机软硬件基础、系统指令、程序编译、面向对象开发、设计模式、树图栈队列算法、软件工程、计算机网络等等,考试用书700多页,并且全部都是基础,非常的基础,因此软件设计师中级科目也是中级中最难的科目。
如果能仔细的学完科目中所涉及的知识点,肯定可以覆盖程序员自身相当一部基础知识份盲点,对于那些基础不好的程序员,那更是应该去考一下,就当是学习了。
有些工作五年、八年的老程序员觉得都是基础肯定容易过,但是结果是通常1、2次,乃至3、4次都考不过的,因为它实在是太基础了,对于经常只写CRUD的程序员来说,这些基础内容恰恰是最薄弱的项。
考过以后你会发现自己对计算机、对软件设计有了一个更深层次的理解,知道了软件工程中的几大开模型,了解计算网络原理(像之前在juejin有一个帖子,为什么内网IP是192开头的,答案都是书上的原话)、深度掌握并理解了设计模式。是的你没没错,软设中级也考设计模式,而且是手写代码、手动画图。
真的有必要去考一个,一来呢可以补充基础知识,二来以后就是持证(程序员证)上岗。
完!展开赞过52 - 前几天一个开发同事问我说,他说在网上有帖子说某公司规定所有的后端接口都必须使用Post方式定义,这种方式合理吗?
我思考后,觉得既然有公司这么规定,那它就是合理的。这仅仅是一个公司内部规范,它更多考虑的是如何提高本公司员工的开发效率、减少沟通、学习成本以及避免出问题的概率。
回到这个问题上来,我也来聊一聊自己的看法。
常规做法都是get method用来查询数据,post method用来保存和修改数据。但是在实际使用中get method存在一些限制,比如:中间件会对get请求做缓存,这样就造成了服务间调用数据不能及时获得最新的数据;再一个就是get method在传输的数据结构上支持比较单一,目前仅仅支持k=v这种方式,对于json、xml或者binary无法很好支持。
但是post method却没有这些限制,反而在安全性以及大量数据传输上更具有优势,因此有些公司为了想彻底跳出这个限制,同时又想减少技术成本,就在接口定义上做出了规定,即:所有的接口定义全部都用post method。
除了上面提到的接口使用get method+post method方式,以及全部使用post method方式。有些公司又引入了幂等性和状态概念,即:幂等不修改服务器状态的用get method,幂等修改服务器状态的用put method,不幂等修改服务器状态的用post method,创造出了get+post+put规则。还有一些公司遵循“一切皆资源”设计理念,将接口设计成restful风格,即:get+post+put+delete+head等。
其实我觉得无论那种方式都没有太多可纠结的地方,说到底那就是一个公司内强制规范问题。如果公司的程序员理解能力都比较强、沟通起来比较顺畅,大家也都崇尚“一切皆资源”的设计理念,公司可以将restful作为接口设计规范。如果公司项目版本很密集,项目规模很团队都很大,团队成员之间沟通可能不是那么频发,成员的理解能力也是层次不齐,这个时候全部post method才是最佳为选择。展开2点赞 - 前两天,一个问同事问我有没有去看雷军的2023演讲,他说雷军2023演讲出了许多振奋人心的金句。于是我在昨晚看了演讲的回放,从中总结了演讲中的几条金句:
1、多向别人请教,99%的问题,都有标准答案,找个懂行或者经历过的人问问,一问便知。
2、学会抱团取暖,一个人可能走得更快,但一群人走,相互扶持,才能走得更远。
3、学会高效学习、,知识不全是线性的,大部分是网状的,知识点之间不一定有绝对的先后关系;前面内容看不懂,跳过去,并不影响学后面的;后面的学会了,有时候更容易看懂前面的。
4、和好朋友合作,一个人能力再强,也是有限的,找互补的朋友一起干,更容易成功。
5、脚踏实地干活,只有脚踏实地的成长,才有足够的自信、勇气与决心,去迎接所有未知的挑战。
6、突破自己的局限,要给自己设定明确的目标,并采取积极的行动,接受挑战和尝试新鲜的事务,寻求周围的支持和鼓励,保持耐心和坚韧。
最后,永远怀揣着梦想,保持对生活的热情,人因梦想而伟大,又因坚持梦想而成长,愿你历经岁月洗礼,梦想依旧熠熠生辉。展开等人赞过24 - 前几天,一个开发同事问我,他说我们数据库中在保存记录的状态时,是否可以用0来表示记录的某个状态。
数据库中对于数据记录状态是否用0来表示,还是用其它的数字如1、2、3、4表示,其实没有标准的答案,但是有一些常规做法可以参考。
如果你当前表中的的某个字段具有明显的非黑即白的特性,例如:数据记录的有效状态通常用启用和禁用来表示,那么在数据库中就可以用1代表启用,0代表禁用,因为在mysql中0等于false,1等于true。
如果你当前表中的的某个字段具有明显的状态机的特性,例如:订单的支付状态通常有初始创建、待支付、已支付、已退款等等,那么在数据库中可以使用1、2、3、4这种方式来表示,或者可以可以使用10、20、30、40这种方式来表示。展开赞过62