前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我的 .NET Core 博客性能优化经验补充

我的 .NET Core 博客性能优化经验补充

作者头像
Edi Wang
发布2020-02-18 23:32:57
4460
发布2020-02-18 23:32:57
举报
文章被收录于专栏:汪宇杰博客汪宇杰博客

导语

去年年底我写了一篇《我的 .NET Core 博客性能优化经验总结》,但后来还发现有一处遗漏需要补充。我们一起来看看~

牺牲空间换时间

我们知道软件设计只有高手才能做到又小又快,像我这种普通程序员通常只有两种方案:牺牲时间换空间、牺牲空间换时间。那么在需要追求性能的情况下,可以做一些空间上的牺牲。例如,数据库可以保存冗余数据。

牺牲数据库空间

在我博客中,我需要在文章列表页面显示内容摘要,这个摘要来源于整篇文章的前400字。在我的旧版 .NET Framework 博客里,这个操作每次都是 SELECT 完整文章内容后用 Substring() 截取前400字,由于用了 EF,很难在 SQL 里完成这个截取,因此白白消耗了很多时间和网络传输成本。而在 .NET Core 重写的博客中,我调整了这个设计,在文章表里新加了一列,专门用于存储前400字的文章摘要,而摘要的内容会在新写文章或者编辑文章的时候计算完成并存储到数据库,这样我显示文章列表的时候就不需要去 SELECT 完整的文章内容。虽然这样的设计严格来说肯定不满足数据库的那些个范式,但充分提高了此处的性能。

在企业系统里,这种做法也比较常见。如果有开销比较大的计算才能得出的结果,并且结果不会变,那么不需要每次都去算,而设计成算完就存储在数据库里,以提高性能。

牺牲文件系统空间

我博客中,RSS/ATOM/OPML 等订阅源在以前也需要每次都去数据库取数据计算完成后,输出到客户端。然而这类数据也有个特性,就是几乎不会变。于是我就设计成第一次用户访问的时候,将计算结果生成 XML 文件缓存到临时目录,那么后续用户访问的时候就不需要 hit 数据库了。仅当文章内容有修改的时候,drop 掉缓存的文件,让用户下次请求时重新生成。

本文小结

  1. 在系统设计中,不要过分遵守理论,比如数据库范式,要具体分析自己遇到的业务情况,并做调整,世界上没有可以完美复制的“最佳实践”,只有适合自己业务的才是最佳实践。
  2. 懒,越懒越好!充分分析业务,明确哪些数据不容易变,可以缓存就缓存,文件也好,内存也好,根据需要自己设计。能不要去调用数据库的就尽量不要去用,因为通常系统最慢的环节就是在调用不同的API和数据库通讯上。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 汪宇杰博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档