`
hq185fvl
  • 浏览: 5962 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

数据表结构设计和缓存优化的经验教训

阅读更多
    最近给XX客户实施的物资系统已经顺利度过了试用期,进入稳定运行期了,各项功能基本已经不再变更,稍微清闲了一点,因此想在性能上更完善一下,我想对系统的各数据查询进行缓存处理,降低数据库的IO次数,提高数据的查询效率,仔细阅读了一下Ehcache的应用场景和注意事项,突然发现能缓存的数据很有限,基本不能起到优化的作用。现将我们项目的情况和系统数据结构设计概况做一个大致的介绍,并针对此情况进行一下自我剖析,说丑点就是做一个数据设计的反面典型吧,哈哈,希望广大同行能共同交流提出更好的意见和建议。
    一、项目概况:
      物资管理应该是个传统型业务了,因为客户对他们需求和目标描述的并不清晰,因此这个系统我们采用的是原型开发模式,在设计初期很多时候考虑的是客户的需求,和开发的效率,主要的目的是能够实现快速迭代,弱化了对数据结构的设计,具体表现是我们将经常变动的物资的金额和数量都保存在同一表结构中了。
   
二、采用技术框架:传统的SSH,UI: Ext js。DB:Oracle 10g

三、具体举例
    很多表结构大致设计都类似如下(只选取了关键字段)
物资编码表:
ID 编码 名称 单位 单价 数量 金额
1 0001 柴油 吨 6000 10 60000

优点:数据操作简便,在新增记录和修改记录的时候,直接使用Hibernate对单实体进行操作,查询的时候也可以一次查出该项记录,不必做连接查询。

缺点:因为单价、数量、金额这三个字段会随着每次物资的出入库,频繁的进行更新。据Ehcache的描述,对于频繁修改的数据,需要频繁的和数据库和内存之间进行数据交换,从这点可以看出,数据的命中率肯定比较低,这样不仅不会提升效率而且还会大大的降低系统的性能。且可能造成数据的不一致,如果遇到每月系统自动扎帐,系统的调度任务调度该月物资出入库明细情况,碰巧遇到缓存数据和数据库数据不一致的情况,那该月将直接影响物资财务数据。而财务管理要求每月几百万的出入金额不能出现一分的误差,得严格遵循本月库存=上月库存+本月入库-本于出库这个铁律。而数据的不一致很可能就造成上述等式不成立,这在财务管理业务中是绝对不允许的。

我的目标:我想把日常经常查询的物资基础信息(名称,单位、型号等)、需求计划基础信息、领用申请等基础信息放到缓存中。以提升系统效率,降低数据库的压力。

解决方法:将物资编码表、物资计划表、采购计划表等表中相对固定的字段和频繁更新的字段进行拆分,达到低频率变更和高频率变更数据分别存储,这样就可以使用Ehcache,Redis,或memcached等相关缓存组件对低频率更新高频率查询的数据载入缓存,而对于高频率更新的数据采用实时查询方式。这样就降低了数据库的IO次数和数据查询量,对数据库的查询就变成了尽量查询更新频率较高的数据了。在提升效率的同时消除了重要数据的不一致性,达到了缓存优化的目的。
那么问题就来了,因为该项目目前已经进入了稳定运行期,系统的各项性能都在指标范围之内,并已顺利通过了验收。数据结构的任何变动理论上都可能带来系统的不稳定,若要达到上述的目的,并保持系统的稳定,那我们就必须对原有系统DAO层逻辑进行大量的改造和回归测试,这我们这种做企业级应用的公司来说,在客户不额外增加费用的情况下,同时消耗本公司资源的情况下,老板是不赞同的。呵呵,除非出于技术情怀,在不影响正常工作的情况下,自愿加班加点的改造,但白天上班已经很累了。加班加点的改造,我的情怀还没上升的那种为追求完美,可以为性能废寝忘食的地步。
    我上述的目标纯粹是从对系统锦上添花的角度考虑的。也是对整个项目在数据结构设计的角度进行了自我剖析,回想一下,若一开始我们在数据结构设计的时候就考虑了后来的性能调优需求,而不是一味的考虑快速迭代,只考虑编写代码方便省事。大概后来就不存在现在看到系统的不足,但又无能为力的窘境了。
特此留文,警醒自己,在以后的工作中,不能再犯类似错误。
1
4
分享到:
评论
1 楼 huangyunbin 2016-03-30  
感觉加缓存没必要改表结构吧

相关推荐

    Bigtable结构化数据的分布式存储系统.pdf

    文中还分享了设计Bigtable时的经验教训,如考虑数据局部性、权衡内存和磁盘使用,以及如何应对不断变化的工作负载。最后,讨论了相关工作,比较了Bigtable与其他分布式数据库系统的差异。 总之,Bigtable是Google为...

    维护电信计费系统Oracle的经验和教训

    这包括SQL查询优化、索引管理、表分区、缓存设置等。定期进行性能分析和调整,如使用SQL Profiler和AWR报告识别性能问题。 2. **数据安全**:保护用户数据的安全是首要任务。确保用户权限设置合理,使用加密技术...

    分布式缓存的最佳实践案例分析.pdf

    分布式缓存是现代互联网应用程序中不可或缺的技术,它能显著提高数据读取速度,降低...这些实践案例和经验教训为开发者提供了宝贵的指导,有助于构建健壮、高效的分布式缓存系统,确保在互联网环境中提供优质的服务。

    哈希表设计 代码加报告

    这种数据结构在计算机科学中有着广泛的应用,尤其是在数据库、算法优化、缓存管理等领域。在这个"哈希表设计 代码加报告"的压缩包中,我们可以期待找到关于哈希表理论知识的阐述,以及实际编程实现的代码和实验报告...

    江西微软实训评教系统-系统设计与分析报告

    - **逻辑设计**:基于概念模型构建逻辑数据模型,确定表结构、字段类型等。 - **物理设计**:考虑具体数据库管理系统(DBMS)的特点,进行物理层面的设计,如索引、存储过程等。 3. **数据库优化及管理**: - **...

    课程设计 新闻发布系统

    在完成系统开发后,总结设计过程中的经验教训,评估系统的性能和可用性,提出改进和优化的建议。 综上所述,新闻发布系统的设计和实现涵盖了Web开发的多个方面,包括前端界面设计、后端逻辑实现、数据库管理和安全...

    ASP+ACCESS基于WEB社区论坛设计与实现(源代码+论文).rar

    3. **数据库设计**:详述ACCESS数据库的表结构,包括字段选择、数据类型、索引设置,以及表之间的关系。 4. **功能实现**:详细说明每个功能模块的实现方法,如用户认证、数据验证、查询优化等。 5. **性能和安全...

    XML与关系数据交换 Relational_and_XML_Data_Exchange

    - **关系模式到XML Schema的转换**:反向过程,即将关系型数据库中的表结构转换为XML Schema定义的数据结构。 - **数据交换语言**:定义了一种语言或语法来描述如何从关系型数据中抽取数据并转换为XML格式,或者将...

    毕业设计(论文)-基于ASP和SQL Server的网站后台管理系统-用户管理模块开发及实现

    SQL Server 2000的表结构、索引和关系设计直接影响到数据的存储效率和查询速度。 6. **开发流程**:从需求分析、系统设计、编码实现、测试调试到上线运行,每个阶段都是系统开发不可或缺的部分。本设计可能涵盖了...

    asp.net师电子化信息库的设计与实现(源代码+论文).zip

    数据库设计应包括对实体(如用户、文档、分类等)的表结构定义,以及相应的索引和关系设计,以优化查询性能。 5. 源代码解析 源代码中可能包含以下几个关键部分: - 用户管理模块:实现用户注册、登录、权限控制等...

    Oracle Data Warehouse Management

    10. **案例研究与最佳实践**:通过实际案例分析,展示如何在不同业务场景下成功实施Oracle数据仓库解决方案,并分享最佳实践和经验教训。 通过对这本书的深入学习,读者不仅能掌握Oracle数据仓库的理论知识,还能...

    bigtable中文翻译.pdf

    在数据模型方面,Bigtable被设计为一个稀疏的、多维度排序的映射表,由行关键字、列关键字和时间戳进行索引,每个数据项是一个未解释的字符数组。这种模型类似于键值对存储,但增加了时间戳维度,便于版本管理和数据...

    ASP.NET+SQL房地产管理系统设计与实现(开题报告+源代码+论文+任务书+工作总结+答辩PPT).zip

    在本系统中,SQL用于创建数据库结构,如房地产信息表、用户信息表等,以及执行数据查询、插入、更新和删除操作。 4. 微信登录功能:项目标签提到“微信登录根据openid获取手机号”,这意味着系统集成了微信开放平台...

    Java+MsSQL超市进销存(毕业设计及答辩资料)

    2. **数据库设计**:理解ER图和关系数据库模型,设计合理的数据库表结构,如商品表、供应商表、库存表、交易表等。 3. **索引**:通过创建索引来提高查询效率,了解聚集索引与非聚集索引的区别。 4. **事务管理**...

    基于springboot的电子商务系统源码数据库论文.doc

    8. **总体设计**:系统逻辑结构图和ER图展示了系统的整体架构,数据库设计包括表结构和关系设计,功能设计明确了各个模块的功能职责。 9. **测试**:系统测试确保了功能的正确性和稳定性,包括测试目的、内容和总结...

    基于Java-的网络音乐分享网站设计与实现.docx

    2.2 数据库设计:设计合理的数据表结构,如歌曲表、用户表、评论表等,以存储和检索音乐信息和用户数据。 2.3 安全性设计:考虑用户数据保护,实现密码加密存储,防止SQL注入等安全风险。 2.4 性能优化:通过缓存...

    ASP.NET 开发基于CS结构的企业人事管理系统的设计与实现(源代码+论文)

    在开发过程中,首先需要设计数据库模型,这通常涉及使用SQL Server或其他关系型数据库管理系统(RDBMS)创建数据表,如员工表、部门表、职位表等。然后,使用ADO.NET或Entity Framework等数据访问技术连接数据库,...

    项目完成 - 基于Django3.x版本 - 开发部署小结.doc

    总结,基于Django3.x的项目开发和部署涉及到数据库适配、大数据处理策略、接口缓存优化以及前端框架的选择。这些经验教训对于其他Django开发者来说具有很高的参考价值,尤其是在处理大规模数据和提高服务性能时。

    c++数据库管理系统开发集成案例分析

    3. **数据结构与算法**:高效的数据库管理系统离不开良好的数据结构设计,如B树、哈希表等,用于快速查找、插入和删除数据。同时,优化查询算法(如索引技术)可以显著提升性能。 4. **C++与数据库接口集成**:C++...

    公交线路管理模拟系统任务书

    3. **系统性能优化**:确保系统运行稳定、功能完整的同时,注重数据结构的选择和算法设计,提高程序执行效率。 4. **代码质量控制**:编写高质量的代码,确保代码规范、可读性高,结构清晰,并具有良好的健壮性、...

Global site tag (gtag.js) - Google Analytics