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

Editor.md

(该项目很久没有更新了,或多或少存在一些BUG)
备用MarkDown编辑器:https://github.com/yutuo/mdeditor.yt

CodeSnippet.info整体技术构架的更多相关文章

  1. 本人提供微软系.NET技术顾问服务,欢迎企业咨询!

    背景: 1:目前微软系.NET技术高端人才缺少. 2:企业很难直接招到高端技术人才. 3:本人提供.NET技术顾问,保障你的产品或项目在正确的技术方向. 技术顾问服务 硬服务项: 1:提供技术.决策. ...

  2. Suggestion(搜索建议)产品和技术

    今天来简单聊聊Suggestion产品 什么是Suggestion服务? 一图胜千言: 当你想要搜索某个长词语或者一句话输入部分时,Suggestion服务预测你极大可能的候选项,并罗列出来,供你选择 ...

  3. Spring技术内幕——深入解析Spring架构与设计原理(一)IOC实现原理

    IOC的基础 下面我们从IOC/AOP开始,它们是Spring平台实现的核心部分:虽然,我们一开始大多只是在这个层面上,做一些配置和外部特性的使用工作,但对这两个核心模块工作原理和运作机制的理解,对深 ...

  4. 极光推送CTO黄鑫:技术人员要建立自己的知识图谱

    本周,我们邀请到了极光推送CTO兼首席科学家黄鑫进行人物专访,在展示风采的同时,也分享会员们对技术.对工作.对人生的感悟.       扎实的底层服务是扩张关键 极光推送是一个做第三方云服务的公司,在 ...

  5. 关于IT公司技术委员会职责

    技术委员会的核心职责 组织人才相关 • 制定职级标准 - 能力框架:知识,技能,通用素质 - 职级标准:T2T3T4-P7P8P9- • 职级评审,对齐标准 • 高端招聘,对齐标准 • 校园招聘,对齐 ...

  6. AngelToken:区块链技术的突破

    科技进步,直接捅破了政治.金融.军事领域所有的玩法,让工业革命以来形成的规则变得一钱不值. 而且,当下的最重要的技术趋势——区块链.Token.AngelToken,正在引导我们走向全面的失控和未知. ...

  7. hadoop大数据基础框架技术详解

    一.什么是大数据 进入本世纪以来,尤其是2010年之后,随着互联网特别是移动互联网的发展,数据的增长呈爆炸趋势,已经很难估计全世界的电子设备中存储的数据到底有多少,描述数据系统的数据量的计量单位从MB ...

  8. 一个CTO谈自己的技术架构体系

    理解算法背后的世界观 我比较擅长的领域可能是数据和架构两个方面吧. 大数据方面就是数据挖掘.数据分析等领域,我现在带着极光推送整个的数据团队,需要把握数据团队的技术方向,还需要做很多算法方面的研究. ...

  9. 3D动态人脸识别技术分析——世纪晟人脸识别实现三维人脸建模

    - 目录 - 国内3D动态人脸识别现状概况 - 新形势下人脸识别技术发展潜力 - 基于深度学习的3D动态人脸识别技术分析 1. 非线性数据建模方法 2. 基于3D变形模型的人脸建模 - 案例结合——世 ...

随机推荐

  1. MySQL 5.7新特性之Generated Column(函数索引)

    MySQL 5.7引入了Generated Column,这篇文章简单地介绍了Generated Column的使用方法和注意事项,为读者了解MySQL 5.7提供一个快速的.完整的教程.这篇文章围绕 ...

  2. Nodejs·进程

    之前对这部分的内容很感兴趣,没想到读起来有点晦涩,还是因为对服务器的知识不是很了解. 说道服务器一般人都会想到tomcat或者Jboss或者weblogic,现在流行起来的Node总让人不太放心,JS ...

  3. Windows hosts (使用方法 && 不定期更新)

    Windows 系统hosts位于 C:\Windows\System32\drivers\etc\hosts 使用方法:删除原来的hosts文件(不放心可以剪切到其他路径备份),然后将本文链接里的h ...

  4. Atitit 数据存储的数据表连接attilax总结

    Atitit 数据存储的数据表连接attilax总结 1.1. 三种物理连接运算符:嵌套循环连接.合并连接以及哈希连接1 1.2. a.嵌套循环连接(nested loops join)1 1.3. ...

  5. 23.实现一个名为Person的类和它的子类Employee,Employee有两个子类Faculty 和Staff。 具体要求如下: (1)Person类中的属性有:姓名name(String类型),地址address(String类型), 电话号码telphone(String类型)和电子邮件地址email(String类型); (2)Employee类中的属性有:办公室office(Stri

    package banking; public class Person { private String name; public String address; public String tel ...

  6. wamp2.5 配置Apache允许外网访问

    找到<Directory "e:/wamp/www/">节点,在里面添加Require all granted

  7. Unity3D 为什么保存Transform等引用效率会更高

    正常来说,大部分同学一般get transform都直接gameobject.transform使用.但往往,你会发现有些人会将transform引用保存起来,例如:   private Transf ...

  8. windows phone Datepicker Timepicker

    选择程序包管理器控制台 在PM后输入Install-Package WPtoolkit可自动下载 PM> Install-Package WPtoolkit 在xaml中添加引用 xmlns:t ...

  9. IO流-概览

    一. 抽象类InputStream和OutputStream构成了了IO类的基础 因为面向字节流的对象不便于处理Unicode形式储存的信息,所以从抽象类Reader和Writer中继承出专门用于处理 ...

  10. 模拟java.util.Collection一些简单的用法

    /* 需求:模拟java.util.Collection一些简单的用法! 注意:java虚拟机中并没有泛型类型的对象.泛型是通过编译器执行一个被称为类型擦除的前段转换来实现的. 1)用泛型的原生类型替 ...