原文出处:http://argan.iteye.com/blog/556641
作为架构师或者开发人员,面对业务方提出的数据结构变化的需求总是很头痛的,今天让你加个描述字段,明天让你再加个什么标记,后天又需要增加一个时间戳,千奇百怪,层出不穷,实在头痛。但是,我们不能随意的指责什么,因为业务在发展,而且我们不能也不应该因为技术或者实现的原因去否决一些业务变化,毕竟技术是什么?真正产生价值的还是业务!
那,在实践中,我们如何面对这种无法避免而且往往很难预期的数据结构变化呢?
第一种方法,预留字段
既然很难加字段,就预先留好一些备用,比如加上10个Date,20个VARCHAR,10个Number之类的,虽然看起来猥琐了点,而且没那么灵活,其实还是很实用的,生产中也有不少人使用,不过因为预先留的字段一般是没什么含义的,需要有额外的信息来描述他,COL1是什么含义,COL2是什么含义,演变到后来有的就干脆更极端,所有字段都是无意义的名字,全靠外部的meta信息来描述,这种用法据我所知至少有三个地方在使用,两个是我亲自听到设计者描述的,另一个是别人告诉我的
不管怎样,预留字段的方式还是很解决很多问题的,而且基本不影响性能,除了额外的meta信息描述外,也没有其他的负担。
第二种方法,使用复杂字段
这个应用的场景不是很多,在某些特殊要求下还是很有用的,比如,某个业务实体(某张表),有一些标记位,都是true/false之类的标记,可以理解为这个实体的一些属性,经常需要添加,这种情况,在生产中我们使用过用一个数字,按位来表示这些标记的,比如第三位表示他是不是付费用户,第四位表示他是合作方来的用户还是自己注册的,等等。还有一种情况,需要更复杂的属性列表,属性个数经常变,可以考虑使用一个文本字段,保存结构化的数据,比如自己定义一个xml的格式
使用复杂字段的好处就在于比较灵活,同一类型的数据可以放在一起(实际上相当于把应该是一个关联表的数据放一个字段里了),操作的性能也不错,但是复杂字段里面的内容查询比较困难
还有一种方法,将数据的存储和索引(需要查询的内容)分开存放,相当于主表就一个key-value,value就是一个大的xml(或者其他的一坨),把需要查询的字段放到其他单独的表里去,可以参考friendfeed如何使用mysql,这是一个实际的例子。实际上在02-03年的时候,老是面对这样的问题,我就在考虑这样的方案,我当初的想法是,用bdb来存储数据(就是那个key-value)了,要检索的数据放到lucene里去,但是因为那个系统对实时性的要求而没法实施,但是并不是每个系统都要求这么实时的,在有些地方还是可以考虑使用的
另外,还有column based db,也可以很好的解决这个问题,实际上他就本本回避了加字段的问题,不过现在似乎没有性能很好的实现
上面这些方案的,都有局限性,选用的时候要看场景的,而且有可能今天作出的决定是对的,过了两年就变的不适合了,事情总是在变化的嘛...
分享到:
相关推荐
在Android开发中,Realm是一个流行的本地对象关系映射(ORM)解决方案,它为移动设备提供...通过学习和实践这些知识点,开发者能够更有效地管理和维护 Realm 数据库,同时理解如何在遇到数据库结构变化时进行妥善处理。
### 山洪灾害专题数据库表结构及数据上报技术要求解析 #### 一、核心知识点概述 山洪灾害专题数据库表结构及数据上报技术要求是一份技术文档,旨在规范山洪灾害监测预警平台的建设和数据上报流程,确保县级平台...
在数据库设计领域,一款好的工具能显著提升工作效率,EZDML表结构设计器显然致力于此,通过提供易用且功能丰富的界面,帮助用户轻松应对复杂的数据库设计挑战。无论是初学者还是经验丰富的专业人士,都能从中受益。
当数据库表结构发生变化,如增加新表或修改已有表的列,DatabaseManager提供了一种优雅的处理方式。开发者无需再为每个版本变更编写特定的升级代码,只需要简单地增加数据库的版本号。系统会自动检测当前数据库版本...
随着业务需求的变化,数据库表结构的动态修改变得不可或缺。本文主要探讨如何在 SQL Server 中通过数据字典和存储过程来实现这一功能,以提高系统的灵活性和适应性。 数据字典是数据库设计者的重要文档,记录了...
描述中的“可应对以后新增的区”意味着这个数据库设计时已经预见到了行政区划的变化,可能包含了对未来可能出现的新区预留了空间,比如添加新数据或者扩展表结构,以保证数据库的持久性和适应性。 标签“省市县”...
作者设计了一种可动态维护的表结构,通过JSP的编程能力,实现对数据库表的动态创建、修改和删除,确保了系统能够适应未来的需求变化。 在实际开发过程中,作者强调了系统的实用性和维护便利性。通过JSP的内置动作和...
这个选项默认可能是勾选状态,它防止用户进行可能导致表结构大幅变化的修改,因为这类修改通常需要重建整个表,这可能会导致数据丢失。为了允许保存表结构的修改,需要取消勾选这个复选框,然后点击“确定”保存设置...
变化识别与风险评价是企业在日常运营中不可或缺的一个环节,它涉及到组织结构、人员配置、生产流程、技术应用、法规遵循以及与合作伙伴关系等多个层面。在上述提到的“变化识别与风险评价表参照.pdf”文件中,我们...
ChatGPT技术在应对用户情绪变化方面展示了人工智能在自然语言处理领域的进步。用户情绪识别是这一过程中的关键步骤,ChatGPT需要通过分析用户的言语特征,如词汇选择、语调和句子结构,来判断用户的情绪状态。这通常...
2. 自然经济的解体:自然经济的解体是中国近代经济结构变化的重要特征,表现为耕织分离和纺织分离,这使得大量劳动力从农业生产中释放出来,为新兴的工业提供了劳动力资源,同时也促使中国逐渐成为西方国家的原料...
在现代商业环境中,消费者意识的变化是企业成功的关键因素之一。"消费者意识变化分析表模板.doc" 提供了..."消费者意识变化分析表模板"提供了一种工具,帮助企业系统地理解和应对这些变化,从而在管理决策中占据优势。
这有助于跟踪和更新整个结构设计的信息,例如材料规格、荷载变化等。 5. **可视化工具**:Excel还可以创建图表和图形,帮助设计师直观理解结构性能。比如,应力分布图、弯矩图等,通过颜色编码和线条表示,使结果...
5. **组织答案**:结构化地呈现答案,清晰表述变化前后的情况,并给出相应的理由。 在教研过程中,教师应注重培养学生的史料分析能力,引导他们从不同角度观察历史,训练他们从繁杂的信息中提炼关键点。同时,通过...
表结构设计是进销存管理系统的基础,通常包括但不限于以下表格: - 商品表:存储商品的基本信息,如商品ID、名称、类别、供应商、价格等。 - 库存表:记录商品的库存数量、入库日期、出库日期等。 - 订单表:保存...
通过定期审查和更新,团队可以持续监控风险状况,并根据项目进展和外部环境的变化调整应对策略。此外,有效的沟通和培训也是确保所有团队成员理解和执行风险应对计划的关键。 总结来说,"2.38 单个风险应对计划表....
"消费者意识变化分析表.doc"着重探讨了几个核心领域,旨在帮助企业理解这些变化,并采取相应的策略来适应市场。以下是对这些关键点的详细解读: 1. **消费者社会构造的变化**: - **高龄化社会**:随着人口结构的...
消费者意识变化分析表是一种工具,帮助企业理解并适应这些变化,以确保其产品和服务能够满足不断演变的市场需求。以下是基于标题、描述和部分内容的关键知识点的详细说明: 1. **消费者社会构造的变化**:社会结构...
- **备份数据**:在进行任何可能导致数据表结构变化的操作前,请务必先做好数据备份,以避免因操作失误而导致的数据丢失。 - **了解更改的影响**:在取消上述保护选项之前,请确保充分理解所做的修改可能对现有数据...