码迷,mamicode.com
首页 > 其他好文 > 详细

这几天设计讨论的一点心得

时间:2015-02-12 02:04:25      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:数据库   新项目   接口   

这几天和同事讨论新项目、系统的设计方案。理越辩越明,有一些以前模模糊糊的想法、概念,都随着讨论,有时甚至是争论而变得清晰明确。


一是服务接口的幂等性。

以前做服务接口,都没考虑过这个问题。这次静下来想了想,觉得服务接口必须具备幂等性才对。

也就是说,在没有其它操作的情况下,对同一个服务接口无论调用多少次,系统状态以及返回结果都应当是一样的。

如果不是这样,前后脚两个操作,一个告诉我说OK了,另一个告诉我说出异常了。这算什么鬼=。=

就一般的增删改查来说,删改查基本上是很容易支持幂等性,甚至天生幂等的。

但是新增,由于语义上每次都要追加一条数据,那么多次操作当然会多次增加数据咯。

让新增操作变成幂等性操作,需要有重复校验。页面提交上可以带token,但是服务接口呢?

恐怕只好做唯一数据校验吧……这个校验又可能涉及到事务和并发的处理……


于是麻烦了,算了,直接抛出异常告诉服务调用者“数据重复”吧!


这是服务还是别的什么鬼=。=


我这次做的一个接口,向着“幂等的新增接口”走了一步,保持其对外的语义是:你给我一笔数据,我返回一个唯一标识;相同的数据,返回相同的标识。


自我感觉良好o(* ̄▽ ̄*)ゞ


二是数据库字段设计

数据库是严格遵循范式,还是破坏范式、存复杂结构(数组,甚至json)?昨晚认认真真争论了一次。


如果遵循范式,那么,组织各种sql都很简单,不需要系统内再对数据做二次处理。并且,针对这些数据做任何其它的查询、统计都很方便。

但是,数据量会变大。因为1:n的“n”都被摊开了,可能会导致库表中出现50w*20+的数据量。另一方面,当需要扩展新的数据结构时,会变得更加困难。因为当前的数据结构不一定能支持后续的数据结构。


而如果一个字段中存入复杂结构,优缺点基本上正好相反。


争论的结果在这里不说了。总之,参考两个方面的优缺点和自己的需要做决定吧


本文出自 “编程的摩羯男” 博客,请务必保留此出处http://winters1224.blog.51cto.com/3021203/1613832

这几天设计讨论的一点心得

标签:数据库   新项目   接口   

原文地址:http://winters1224.blog.51cto.com/3021203/1613832

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!