/*十有三博客*/
  • 首页
  • 关于本站
  • 网站地图
  • RSS订阅

记录下自己对网站全局设置存储方式的心得

2016-12-16 十有三 4 浏览:1万+ .NET技术 随笔

本文主要记录我在网站全局设置方面,使用和选择存储方式的一些心得和经验。对于网站的全局配置信息,我比较常用的存储方式有XML文件,JSON文件,数据库这三种,比较少见的有ini文件,其他的暂时还没接触过。选择什么样的存储方式还是要先根据客观因素和需求进行分析,毕竟网站的全局设置是属于频繁读取的数据,要慎重选择数据存储方式!

PS:网站中的全局设置(系统配置/全局配置),一般是指通用及默认的一些数据。这部分数据通常可以进行灵活的更改和设置,比如网站名称,网站默认关键词、描述、标题,文章默认底部声明和默认的作者,邮件发送配置等。另外也包括各种功能的开关设置,比如是否关闭评论,文章列表是否显示摘要等。

全局设置和系统配置数据存储的一些注意事项和误区

首先说一个混搭的问题,我比较不建议混搭数据存储方式,例如网站的全局设置数据采用的是JSON文件来存储,而网站的其他数据使用mysql数据库。

之所以不建议混搭存储方式,主要是考虑到这几点因素:

  1. 增加开发人员的工作量,影响开发效率,还会增加项目结构的复杂度。主要原因是数据存储方式不统一,开发人员还要单独开发对应的数据操作功能。而且这部分数据如果要与其他数据建立联系,代码写起来也挺烦人的。
  2. 不利于维护和部署。例如数据备份,不管是文件备份还是数据库备份,混搭都会增加额外的工作量,也不利于监控管理。另外对于网站的更新部署也同样的困扰,产生更多配置数据的差异性(发布版本/开发版本)。

当然这也不是绝对肯定的,毕竟需求千变万化,每个项目都有自己受限的条件和要考虑的因素。我的观点是对于类似网站的全局设置参数,保持数据存储方式的统一性是最好的,对开发人员和运维人员都是友好的方式。

另外这里说下我自己曾经犯过的错误认识,就是过度优化,太过最求这类全局设置数据/系统配置数据的访问速度,从而选择了错误的存储方式。最早在开发十有三博客的时候,考虑到全局设置数据的数据量较小,而且需要频繁读取,决定将网站配置数据使用XML文件存储。当时网站的数据库是使用sql server express,相当于混搭了数据存储方式。(当初有进行过测试,虽然小数据量的情况下文件I/O的读取比数据库快,但效果并不是那么明显。)

到了后面我才意识到,有种技术叫缓存。其实配置数据因为总需要频繁读取,加上数据变动的频率也不高,所以一般都会使用缓存做处理。如果采用xml/json等外部配置文件,在优势上除了第一次访问速度比较快,其他的我也想不出来,反而造成了数据混搭的问题,破坏了存储方式的统一性!

采用数据库来保存全局设置的一些经验

对于网站中一些通用的,面向用户的全局配置数据,这部分我都建议使用数据库来保存!除非网站本身的数据存储方式不是数据库,毕竟现在网站的数据存储方式各种各样,例如很多CMS系统都提供XML文件和JSON文件来作为数据库的选择。

之所以要强调面向用户,主要就是这部分数据一般都要让使用者可以通过网站后台进行操作,通过可视化界面对网站全局设置进行增删改查操作。从数据库上设计来看,网站全局设置的数据一般都会使用独立的表来存储。我所接触的许多开源CMS都是这样设计的,例如WordPress、BlogEngine.NET等。这里以BlogEngine为例,网站全局设置(系统设置)表的结构如下图:

全局设计表结构演示截图

(SettingName为网站设置的参数名称,SettingValue为网站设置的参数值)

全局设置演示数据列表

可以看出基本的结构就是以键值的形式来设计的,一般我自己也是这样设计。如果有额外需求再添加字段,比如添加参数说明、参数类型之类的,像截图中还有一个BlogId字段,主要是因为这是一个多用户博客系统,所以需要添加一个博客ID来区分不同博客的全局设置。

除了CMS系统,我所开发和遇到过的一些B/S架构的系统,例如OA,CRM、进销存,以及各种企业后台管理系统,只要是关于网站的全局配置,基本上都是将网站全局配置放在数据库中,从经验主义的角度来看,我个人觉得这种方法是最适合的。

适合使用XML和JSON等外部配置文件的情况

我曾遇到的几种情况,就比较适合将网站全局设置存储在外部配置文件,格式上可以采用XML或者JSON:

  1. 面向系统和开发人员,意味可以不用开发相应的后台管理功能,普通用户无法进行操作的数据,只有开发人员和运维人员能直接修改数据。
  2. 数据变动较小,基本不变化的,或者直接就是永久性的数据。
  3. 数据需要方便跨站跨域获取,或者兼容不同设备,方便数据共享。
  4. 从前端考虑,利于前端框架的使用,方便前端进行传输,特别是JSON格式的数据与前端兼容性非常好。
  5. 项目架构需求,不知道能不能配合CDN技术,我也没试过。

最后的小结和题外话

其实如果是自己的项目,只要自己用的舒服,想怎么存就怎么存,甚至可以把配置信息放在一个静态类里,不过一般使用类做配置,都是针对项目级别的,很少针对网站的配置来使用,毕竟改动了还要重新编译和发布网站,比较不灵活。

另外不得不说JSON越来越火热了,就连ASP.NET 5/MVC 6很多地方都使用JSON格式来存储配置。但是任何过分偏激的看法都是不可取的,比如我常常看到很多抨击XML鼓吹JSON的观点。无论选择JSON还是XML,在技术上只有适合和更适合,我自己平时用于前端的数据,比较喜欢用JSON,而与系统打交道的,就比较喜欢用XML。


作者:十有三

出处:https://shiyousan.com/post/636175026426141398

版权声明:本文采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。欢迎转载本文,转载请声明出处或保留此段声明。


  • 上一篇: 织梦dedecms直接通过数据库修改网站配置(系统基本参数)的注意事项
  • 下一篇: 记录MongoDb连接错误System.TimeoutException: A timeout occured after 30000ms selecting a server

相关文章
  • 托管调试助手 "DateTimeInvalidLocalFormat":“正在将 UTC DateTime 转换为某种文本
  • .Net Framework4.0 ashx页面报错:检测到有潜在危险的Request.Form值
  • c# 字符串string类型转换成DateTime类型
  • 解决VS2013编码遇到无法嵌入互操作类型“ChinaPay_NET.NetPayClientClass”请改用适用的接口的问题
  • 解决特殊字符引发的错误:应用程序配置文件"App.config/Web.config"无效。分析EntityName时出错
  • IIS8通过ARR和URL重写模块实现不同站点之间的POST请求重写

文章分类

.NET技术 123 数据库 24 Web前端 21 网站建设运维 37 操作系统与应用 66 程序猿日常 11 开发工具 12 其他随笔 13

文章标签

ASP.NET ASP.NET MVC C# CSS HTML IIS Javascript Linux MongoDB MySql SQL SQL Server Visual Studio Windows系统 版本控制系统 插件工具 服务器 搞笑娱乐 好文分享 软件应用 生活知识 手机问题 随笔 网络知识 网站设计优化 网站维护 养生保健 异常处理 硬件设备 游戏攻略

热门文章

  • IIS8如何安装和使用URL重写工具-URL Rewrite
  • 林蛋大与楚中天,朱肚皮与朱月坡
  • 解决IE11安装升级失败和在安装前需要更新的问题
  • Windows Server 2012无法安装 .NET3.5-安装角色或功能失败,找不到源文件
  • VS重构重命名的快捷键

推荐文章

  • MongoDB学习笔记:28663 Cannot start server. The default storage engine 'wiredTiger' is not available
  • 安卓onenote出现错误代码80a00010导致无法登陆
  • Windows XP系统快速启动栏的"显示桌面"图标丢失不见的解决方法
  • ASP.NET MVC AJAX.BeginForm异步提交和刷新无效
  • 创建 SQL Server Express自动备份数据库功能

友情链接

  • Passingwind的博客
  • 码友网

知识共享许可协议 CC BY-SA 4.0本站作品采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。
闽ICP备15003702号
闽公网安备 35020302035102号