CodeSnippet.info整体技术构架
CodeSnippet.info整体架构
服务器端
Asp.NET MVC5
考察过MVC6,但是现在MVC6还不成熟,技术上不稳定,很多资料也比较少。
所以网站暂时使用MVC5.当然网站的大部分业务逻辑是和MVC框架脱离的,以后升级也应该不会出现很大问题。
数据库选择
数据库暂时使用MongoDB,使用MongoDB纯粹是站长的个人兴趣爱好。
(MongoDB 3.2.4 WireTiger数据库引擎)
MongoDB的优点和缺点十分明显
优点
1.使用MongoDB的C#官方驱动程序,天然的ORM。
2.文档化的数据结构,简化了设计
3.使用MongoDB的TTL索引,可以实现定时缓存功能,数据经过指定时间后就自动从数据库里面删除。
TTL Indexes 官方说明
下面对于CreateDateTime字段设置了一个TTL索引,900秒后自动过期
4.自带GridFileSystem,可以在数据库里面存放文件
GridFS官方说明
缺点
当然,最大的缺点就是对于内存消耗实在太大了。MongoDB就是一个消耗内存的怪兽,如果没有取之不竭的内存,千万不要将文件放在数据库中。
插入17万条数据:每条数据平均大小 0.8K
数据大小144M,压缩存放后占用磁盘空间42兆
整体的索引大小2.34M。
占用内存是多少呢?初始状态:214M,然后随着时间的推移,一直会飙升到600M,很有可能造成服务器内存不足,Mongod线程意外终止。
文件保存
方案1 七牛存储
七牛存储作为一个提供存储的空间,文件的上传下载在编码层面非常方便。
从成本上看,存储 10G 以下是免费的,当然10G以上的收费也还可以,但是成本的大部分还是在流量上面。
方案2 MongoDB
MongoDB自带的GridFileSystem,使用非常方便,数据都保存在本地,安全性是最好的。但是对于内存的消耗实在太大了。
方案3 操作系统的FileSystem
本网站暂时使用这种方案,在网站规模不大的时候,性价比是最高的。
全文检索
ElasticSearch
整个网站虽然使用的是ASP.NET,但是并不妨碍使用Java阵营的产品。
现在网站使用的是ElasticSearch引擎,通过NEST这个Net的客户端类库操作ElasticSearch。
(暂时仅仅对标题进行了索引,没有对于文档内容进行索引)
使用NEST操作ElasticSearch进行全文检索
第三方验证
Github OAuth
由于IT技术人员大都有Github账号,同时为了防止本网站被攻击造成账号泄露,本网站现在使用Github的第三方验证。
使用Github网站OAuth系API进行第三方验证
PDF输出
Spire.Pdf
.NET PDF Component
使用的是免费版本,每个PDF最大页数为10页,如果需要可以考虑购买许可证,599美元。
生成的PDF效果一般,支持HTML中外部图片的抓取,支持简单的CSS和Javascript.
(注意:Microsoft.mshtml.dll 这个动态链接库必须放到网站的Bin目录中。这个插件的本质就是通过内置的浏览器抓取截图
如果有复杂的Javascript生成界面的话,可能抓取的瞬间很多界面都没有完成)
MarkDown编辑器
Editor.md
(该项目很久没有更新了,或多或少存在一些BUG)
备用MarkDown编辑器:https://github.com/yutuo/mdeditor.yt
最新文章
- Window Server 2012 R2 下 IE11 浏览器 无法安装Flash 怎么解决
- Android --时间控件的使用
- Eclipse创建java web工程配置Tomacat和JDK 【转】
- HTML入门的简单学习
- MultiMap
- ApiDemo/FragmentRetainInstance 解析
- 何时可以开启透明数据加密(TDE)?
- Best Time to Buy and Sell Stock I,II,III [leetcode]
- xtemplate语法
- jQuery知识点整合
- android官方技术文档翻译——工具属性
- shell编程基础语法
- LFYZ-OJ ID: 1020 过河卒(NOIP2002)
- dubbo实用知识点总结(二)
- MyBatis笔记----mybatis分页
- JavaScript闭包理解【关键字:普通函数、变量访问作用域、闭包、解决获取元素标签索引】
- kafka的Java客户端示例代码(kafka_2.12-0.10.2.1)
- 非极大值抑制Non-Maximum Suppression(NMS)
- 吐槽Windows 8,就没见过这么烂的平板操作系统
- iptables允许一个ip访问本机的某个端口
热门文章
- Knockout JS实现任务管理应用程序
- 网络误区:不用中间变量交换2个变量的value,最高效的是异或运算.
- Mysql跨表更新 多表update sql语句总结
- 题目一:打印出所有的 ";水仙花数 ";,所谓 ";水仙花数 ";是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 ";水仙花数 ";,因为153=1的三次方+5的三次方+3的三次方。
- 1027 HTML的初学
- vue.js学习之入门实例
- java 线程的终止与线程中断
- gulp/grunt和browserify/webpack的区别
- Ubuntu14中supervisor的安装及配置
- JS中的匿名函数