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

点击上方蓝字关注“汪宇杰博客”

导语

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

牺牲空间换时间

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

牺牲数据库空间

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

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

牺牲文件系统空间

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

本文小结

  1. 在系统设计中,不要过分遵守理论,比如数据库范式,要具体分析自己遇到的业务情况,并做调整,世界上没有可以完美复制的“最佳实践”,只有适合自己业务的才是最佳实践。

  2. 懒,越懒越好!充分分析业务,明确哪些数据不容易变,可以缓存就缓存,文件也好,内存也好,根据需要自己设计。能不要去调用数据库的就尽量不要去用,因为通常系统最慢的环节就是在调用不同的API和数据库通讯上。

其他性能优化事项欢迎参考前篇《我的 .NET Core 博客性能优化经验总结》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php怎么上传函数,PHP单文件上传原理及上传函数的封装操作示例

搜索热词H_404_0本文实例讲述了PHP单文件上传原理及上传函数的封装操作。分享给大家供大家参考,具体如下:H_404_0表单:H_404_00.PHP:无标题文档请选择您要上传的文件H_404_0单文件上传函数的封装:H_404_000.PHP://单文件上传函数的…

蓝桥杯2015初赛-方程整数解-枚举

题目描述 方程: a^2 b^2 c^2 1000 这个方程有正整数解吗&#xff1f;有&#xff1a;a,b,c6,8,30 就是一组解。 求出 a^2 b^2 c^2 n(1<n<10000)的所有解&#xff0c;解要保证c>b>a>1。 输入 存在多组测试数据&#xff0c;每组测试数据一行包含一个正整数…

使用 OAS(OpenAPI标准)来描述 Web API

无论哪种类型的Web API, 都可能需要给其他开发者使用. 所以API的开发者体验是很重要的. API的开发者体验, 简写为 API DX (Developer Experience). 它包含很多东西, 例如如何使用API, 文档, 技术支持等等, 但是最重要的还是API的设计. 如果 API 设计的不好, 那么使用该API构建的…

dedemodule.class.php,DEDECMS5.7模块/模块管理列表显示空白问题解决方法

DEDECMS5.7模块/模块管理列表显示空白(站长基地配图)今天站长基地升级至dedecms最新版本&#xff0c;进入后台意外的发现&#xff0c;模块/模块管理一片空白&#xff0c;但有没有及时备份&#xff0c;于是赶紧去网上找寻解决办法&#xff0c;经过整理&#xff0c;大致有以下几种…

蓝桥杯2015初赛-星系炸弹-日期计算

题目描述 在X星系的广袤空间中漂浮着许多X星人造“炸弹”&#xff0c;用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。 比如&#xff1a;阿尔法炸弹2015年1月1日放置&#xff0c;定时为15天&#xff0c;则它在2015年1月16日爆炸。 有一个贝塔炸弹&#xff0c;a年b…

dotNET Core 中怎样操作AD(续1)

在之前的文章《dotNET Core 中怎样操作 AD&#xff1f;》中主要以AD的数据同步到数据库的场景来描述了在 dotNetCore 中怎样操作AD&#xff0c;本文将继续介绍一些在 dotNetCore 中操作 AD 的其他常用操作。环境dotNET Core&#xff1a;3.0Novell.Directory.Ldap.NETStandard2_…

蓝桥杯2015初赛-奇妙的数字

题目描述 小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。你能猜出这个数字是多少吗&#xff1f; 输出 请输出该数字&#xff0c;不要输出任何多余的内容。 代码如下&#xff1a; #include <iostream> using namespace std; #inc…

Elastic发布K8s部署和控制数据管理工具官方解决方案

用于搜寻企业内部数据的搜寻引擎Elasticsearch开发商Elastic&#xff0c;发布了可在Kubernetes上部署Elastic Cloud的工具ECK 1.0。ECK向用户提供一个官方解决方案&#xff0c;来调度Kubernetes上的Elasticsearch&#xff0c;并让Kubernetes上的Elastic产品&#xff0c;能够以类…

如何启动和关闭oracle数据库,Oracle数据库启动和关闭方式总结

Oracle数据库启动和关闭的方法很多&#xff0c;下面就为您详细介绍几种常用的Oracle数据库启动和关闭方式&#xff0c;供您参考学习之用。一、几种Oracle数据库启动方式&#xff1a;1、startup nomount非安装启动&#xff0c;这种方式启动下可执行&#xff1a;重建控制文件、重…

蓝桥杯2015初赛-牌型种数-dfs

题目描述 小明被劫持到X赌城&#xff0c;被迫与其他3人玩牌。 一副扑克牌&#xff08;去掉大小王牌&#xff0c;共52张&#xff09;&#xff0c;均匀发给4个人&#xff0c;每个人13张。 这时&#xff0c;小明脑子里突然冒出一个问题&#xff1a; 如果不考虑花色&#xff0c;只…

【Magicodes.IE 2.0.0-beta1版本发布】已支持数据表格、列筛选器和Sheet拆分

为了更好的完善Magicodes.IE&#xff0c;春节期间我们会进行一次大的重构。由于精力有限&#xff0c;急缺文档和翻译&#xff08;将文档翻译为英文文档&#xff09;支持&#xff0c;诚邀各位加入。同时在功能方便也做了相关规划&#xff0c;有兴趣的朋友可以参与提交PR。https:…

oracle 取英文排序,Oracle中中文、数字,英文混杂形式的字段进行排序的方法

http://blog.csdn.net/p451933505/article/details/9272257对Oracle中中文、数字、英文混杂形式的字段进行排序的方法&#xff1a;例如&#xff1a;order by NLSSORT(字段名,‘NLS_SORT SCHINESE_PINYIN_M‘), to_number(translate(字段名, ‘0123456789‘ || 字段名, ‘01234…

蓝桥杯2015初赛-饮料换购-枚举

题目描述 乐羊羊饮料厂正在举办一次促销优惠活动。 乐羊羊C型饮料&#xff0c;凭3个瓶盖可以再换一瓶C型饮料&#xff0c;并且可以一直循环下去(但不允许暂借或赊账)。 请你计算一下&#xff0c;如果小明不浪费瓶盖&#xff0c;尽量地参加活动。 那么&#xff0c;对于他初始买…

Mbp,一个用于学习.net core的开发框架

Mbp(https://github.com/mbpframework/Mbp)是一个.net core 3的企业级web开发框架,是我个人用于学习.net core而发起的一个开源项目.这个借鉴了国外优秀开源项目abp vnext,及国内优秀开源框架Osharp的一些思想和实现.欢迎各路开发爱好者加入这个项目,一起学习,一起玩耍,共同成长…

oracle 每日归档量,小知识:统计Oracle的日归档量

首先这对于Oracle DBA来说是个初级问题&#xff0c;即使不熟悉的初级DBA也可以快速在网上搜索到现成的SQL语句。网上搜到的查询SQL基本类似这样的逻辑&#xff1a;select trunc(completion_time) "Date", count(*) cnt, round(sum(block_size * blocks / 1024 / 1024…

蓝桥杯2015初赛-奖券数目-枚举

题目描述 有些人很迷信数字&#xff0c;比如带“4”的数字&#xff0c;认为和“死”谐音&#xff0c;就觉得不吉利。 虽然这些说法纯属无稽之谈&#xff0c;但有时还要迎合大众的需求。 某抽奖活动奖券号码是5位数(10000-99999)&#xff0c;要求其中不要出现带“4”的号码。 主…

什么?原来C#还有这两个关键字

系列介绍简介【五分钟的dotnet】是一个利用您的碎片化时间来学习和丰富.net知识的博文系列。它所包含了.net体系中可能会涉及到的方方面面&#xff0c;比如C#的小细节&#xff0c;AspnetCore&#xff0c;微服务中的.net知识等等。场景您可以在下班坐地铁的时候&#xff0c;拿出…

php files得不到导入的文件,PHP判断文件是否被引入的方法get_included_files用法示例...

本文实例讲述了PHP判断文件是否被引入的方法get_included_files用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;// 本文件是 abc.phpinclude test1.php;include_once test2.php;require test3.php;require_once test4.php;$included_files get_included_files();…

蓝桥杯2015初赛-三羊献瑞-枚举

题目描述 观察下面的加法算式&#xff1a; 其中&#xff0c;相同的汉字代表相同的数字&#xff0c;不同的汉字代表不同的数字。 请你填写“三羊献瑞”所代表的4位数字&#xff08;答案唯一&#xff09;&#xff0c;不要填写任何多余内容。 输出 请你填写“三羊献瑞”所代表…

linux系统中变量,Linux系统中的环境变量知识详解

对于没有使用过linux系统的用户来说&#xff0c;有很多术语和功能都很陌生。本文就介绍了linux系统中的环境变量的相关知识&#xff0c;具体内容如下所述。linux是一个多用户的操作系统。每个用户登录系统后&#xff0c;都会有一个专用的运行环境。通常每个用户默认的环境都是相…