随笔分类 - [20]DesignAnalysis设计分析
-
缓存冷热数据 ——C#实现
摘要:最近做项目时需要实现数据冷热分离功能,现在的NOSQL框架(redis,memcached,mongodb)均已实现了这个功能,直接拿过来用就Ok了,(知其然还要知其所以然吧,呵呵)分析如下:这个功能核心词:“最近(远)最少使用的缓存项”移除缓存就OK了。A.最近(远):第一感觉不就是时间排序(正序,倒序)么。B.最少使用:就是缓存项的get频率了 。C.这个功能的理论支撑就是大名鼎鼎的LRU算法了,核心思想:“在前面几条指令中使用频繁的页面很可能在后面的几条指令中频繁使用。反过来说,已经很久没有使用的 页面很可能在未来较长的一段时间内不会被用到。这个,就是著名的局部性原理——比内存速度还要快 阅读全文
-
流程设计器的界面设计
摘要:现在的业务分工越来越细,很多客户指定要求上工作流系统,就一定要包含流程设计器。而很多开源的工作流系统,都只注重流程引擎部分,或更注重和各种开源的框架,orm等的集成,流程设计器或者根本就没有。这使得很多找开源的工作流系统的系统集成商,不得不面临着要自己写一份工作流设计器,常常在论坛中见求xx流程设计器的。 通常一套工作流系统,流程引擎是核心,灵魂部分,体现了工作流的运转设计思路。流程设计器,就相当于表现部分,利用流程设计器可视化的设计流程,客户不管自己是否会设计流程,都需要开发商提供设计器。有了流程设计器,就可以不了解流程的基本模版定义文件,也能设计出业务流程。 为了能更方便的体现业务流程,. 阅读全文
-
网络爬虫基本原理(二)
摘要:四、更新策略 互联网是实时变化的,具有很强的动态性。网页更新策略主要是决定何时更新之前已经下载过的页面。常见的更新策略又以下三种: 1.历史参考策略 顾名思义,根据页面以往的历史更新数据,预测该页面未来何时会发生变化。一般来说,是通过泊松过程进行建模进行预测。 2.用户体验策略尽管搜索引擎针对于某个查询条件能够返回数量巨大的结果,但是用户往往只关注前几页结果。因此,抓取系统可以优先更新那些现实在查询结果前几页中的网页,而后再更新那些后面的网页。这种更新策略也是需要用到历史信息的。用户体验策略保留网页的多个历史版本,并且根据过去每次内容变化对搜索质量的影响,得出一个平均值,用这个值作为决... 阅读全文
-
网络爬虫基本原理(一)
摘要:网络爬虫基本原理(一) 网络爬虫是捜索引擎抓取系统的重要组成部分。爬虫的主要目的是将互联网上的网页下载到本地形成一个或联网内容的镜像备份。这篇博客主要对爬虫以及抓取系统进行一个简单的概述。一、网络爬虫的基本结构及工作流程 一个通用的网络爬虫的框架如图所示: 网络爬虫的基本工作流程如下: 1.首先选取一部分精心挑选的种子URL; 2.将这些URL放入待抓取URL队列; 3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。 4.分析已抓取URL队列中的URL,分析其中的其他URL,. 阅读全文
-
.Net项目分层与文件夹结构
摘要:.Net项目分层与文件夹结构大全我先来抛砖引玉:传说中的弦哥:tips:1."解决方案文件夹"能帮助你很好的规划项目结构2.通过对"解决方案文件夹"前面加数字1,2,3,4....,能让项目按你想要的顺序排序3.公司名.项目名.包名.架构名的命名空间 命名约定能让你的项目结构更清晰4.分项目的多少还是要根据项目具体情况和架构设计,分太多编译速度慢不说,其实用起来也麻烦一晴:点评:一个比较简单的博客网站,用的是MVC,命名啥的还是比较规范的。建议:可以把Controller和Model从网站项目中提出来xu_happy_you:点评:典型的Petshop控 阅读全文
-
全局配置文件也面向服务了~再续(引入Cache机制)
摘要:在写完面向服务架构~全局配置文件也面向服务了与面向服务架构~全局配置文件也面向服务了~续(对性能的优化)之后,觉得程序还是有可以优化的地方,在我上一篇文章中也提到了cache,所以今天这一篇主要把cache加入到项目中来,以便最大程度上提高程序的性能。 1 /// <summary> 2 /// 从文件中反序列化到实体 3 /// </summary> 4 /// <param name="fileName"></param> 5 /// <param name="type"></para 阅读全文
-
.NET对存储过程的调用抽象封装
摘要:最近一边参与公司的项目开发,一边还肩负着基础库的创建和维护。真真切切的体会到写框架的不容易,写出好的,方便使用的框架更不容易,需要考虑的东西太多,需要掌握的东西太多。不过不要紧我们正在前进的道路上。同志们一起加油!最近在使用存储过程的时候总觉得有点麻烦,尽管在前期对ORM和统一数据源接口封装已经下了很多功夫,对IDataParameter之类的接口已经进行了很好的封装,但是还是觉得麻烦。[王清培版权所有,转载请给出署名]经过与DBA的沟通,他认为对存储过程的封装是有必要的,以他十几年的经验看,存储过程后期的移植是必不可少的。现在的项目是用SQLSERVER2008开发的,后期可能会移植到ORA 阅读全文
-
全局配置文件也面向服务了~续(对性能的优化)
摘要:之所以写这一篇,是因为前一篇面向服务架构~全局配置文件也面向服务了提到了性能问题,所以在这一篇文章里,主要围绕着性能来对ConfigCache这个程序集进行重构。要重构的点:1 实例创建过多,引起不必要的性能消耗2 将配置信息从文件读到内存时,然后在读内容时,去比较最后修改时间与内存中存储的时间是否相同 ,如果不同则重新从文件中读到信息到内存解决第一个问题,很容易想到单例模式,这在我基础才是重中之重~延迟初始化文章中有对泛型单例的介绍,各位可以参考。本例使用单例模式,创建配置信息实体对象,保存在使用这个对象时,只会被创建一次。 1 /// <summary> 2 /// 配置信息. 阅读全文
-
B/S系统中的事件订阅
摘要:我之前写一篇关于事件订阅的文章(事件的好处~实现对修改的封闭,对扩展的开放!~续),但它主要是订阅静态事件,而今天主要讲的是实例事件,即,当一个事件发布者被实例化后,去订阅它里面的事件,然后当这个事件发布者去触发该事件时,自己执行你订阅的内容,这没什么可说的,一切都很正常。但在B/s系统中,常常都有这样一种需求,即:Order类中有方法GeneratorOrder,即生成订单的方法,这个方法会被UI层的很多方法调用,以实现对不同业务产品的购买,如:购买家电产品,购买成功后应该去和家电有关的成功页;而购买日常用品,成功后应该去与日常用户相关的页面;以后还会有其它业务产品的成功页,需要我们去实现。 阅读全文
-
延迟初始化
摘要:概念:一个对象的延迟初始化(也称延迟实例化)意味着该对象的创建将会延迟至第一次使用该对象时。延迟初始化主要用于提高性能,避免浪费计算,并减少程序内存要求。以下是最常见的方案:有一个对象的创建开销很大时,应用程序可能不会使用它。例如,假定您在内存中有一个Customer对象,该对象的Orders属性返回一个Orders对象。初始化Orders对象可能需要创建Orders对象的一个大数组(Orders[]),并可能需要数据库连接。如果用户从不访问Orders属性,则没有理由使用系统内存或计算周期来创建Orders对象。通过使用Lazy<Orders>将Orders对象声明为延迟初始化, 阅读全文
-
全局配置文件也面向服务了
摘要:在面向服务中讲配置文件,肯定是要把它与具体领域分离,即它有普遍的一般性。在程序开发过程中,难免会用到一些易变性,全局的常量信息,我们通常的作法是把它们放在Web.config或者自定义的文件中,当然你的配置文件可以是XML,二进制的等等,但一般时候我们选择用XML标准的文件。看全局配置项目的结构如下:下面我来介绍一下每个文件的使用:ConfigFactory它是一个配置文件的工厂类,作用当然就是“从配置文件中生产对象”了,呵呵。(这讲不考虑性能问题) 1 /// <summary> 2 /// 配置信息生产工厂 3 /// </summary> 4 public c.. 阅读全文
-
操作权限
摘要:第1章 引言1.1 编写目的详细说说操作权限并且在sshpermissions中是如何处理及使用操作权限的。1.2 关于操作这里所说的操作权限是指在我们工作中,比如张三“添加”了一条员工的记录,李四“修改”了哪条信息,管理中对某个角色进行了“授权”。就是我们在系统中所看到的所有的操作。1.3 Shiro中如何处理Shiro 将权限定义为一个规定了明确行为或活动的声明。这是一个在应用程序中的原始功能语句,仅此而已。权限是在安全策略中最低级别的构造,且它们明确地定义了应用程序只能做“什么”。它们从不描述“谁”能够执行这些动作。一些权限的例子:l 打开文件l 浏览'/user/list 阅读全文
-
分布式系统编程
摘要:英文原文:The Game of Distributed Systems Programming. Which Level AreYou? 介绍 当分布式系统编程成为你生活中的一部分时,你需要经历一段学习曲线。这篇文章描述了一下我当前在这个领域大致属于哪个层次,并希望能为你指出足够多的错误,从别人的错误中学习,从而使你能以最优的路径通向成功。先声明一下,我在 1995 年时达到第 1 级,我现在处于第 3 级。你自己属于哪一级呢? 第0级:完全一无所知 每个程序员都从这一级开始。我不会在此浪费太多口舌,因为这实在没什么太多可说的。相反,我会引用一些我曾经经历过的对话,为从未接触过分布... 阅读全文
-
多线程、方便扩展的Windows服务程序框架
摘要:多线程、方便扩展的Windows服务程序框架吴剑 2012-06-02转载请注明出处:http://www.cnblogs.com/wu-jian/前言在项目应用中经常会碰到定时调度的工作,比如我曾经开发一个日访问量超过1000W的网站,如果这1000W访问都从数据库读取数据显示给用户,我的服务器肯定承受不了,于是我需要每10分钟把首页生成一次.html的静态文件;我的数据库里还有一张表,用来收集系统的各种异常、出错和危险信息,我需要把这张表里的记录每半个小时向运维人员发送一封邮件,这样他们就可以及时了解到系统运行情况;我需要每天凌晨统计数据生成报表以方便各个部门的头头们清早就可以查看;需要每 阅读全文
-
NET插件系统——提升系统搜索插件和启动速度的思考
摘要:一. 面临的问题 开发插件系统的主要优势是扩展性,我们不需要为系统模块的集成再多费脑筋,但这也带来了额外的问题。通常,系统需要在每次启动时搜索固定目录下的符合要求的插件。但是,当系统变得越来越庞大,所引用的dll文件越来越多时,就会出现很严重的问题:开启时间慢,性能差,用户体验降低,尤其是在调试程序时,会浪费大量宝贵的时间。 我确确实实的面临了这样的问题,有兴趣的读者可以看看我的插件系列文章的前几篇,这两天痛定思痛,决心提升系统搜索插件的性能。 我们先看一段普通的搜索插件的代码: 1 public void GetAllPluginInPath(string Path, strin... 阅读全文
-
将所有可以抽象的项目进行抽象
摘要:N层架构及各层之间的通讯标准一 总体结构图二 各个模块的介绍通用项目模块Project.Common:它是对所有项目都公开的项目组合,主要提供一个与领域无关的通用功能的代码库核心项目模块Project.Core:它是针对某种构架方式(如LINQ To SQL作为底层架构)抽象出来的项目组合,它与领域无关领域项目模块,它是具体的项目,如XXB项目,它本身也是一个N层架构方式,一般地,它的UI层会继承我们的Product.Core下的Web.Commons项目,而对应的Entity对应Entity.Commons项目,由于BLL层是针对某种特殊业务领域的,所以在Project.Core里没有出现B 阅读全文
-
HBase
摘要:HBase 系统架构HBase是Apache Hadoop的数据库,能够对大型数据提供随机、实时的读写访问。HBase的目标是存储并处理大型的数据。HBase是一个开源的,分布式的,多版本的,面向列的存储模型。它存储的是松散型数据。HBase特性:1 高可靠性2 高效性3 面向列4 可伸缩5 可在廉价PC Server搭建大规模结构化存储集群HBase是Google BigTable的开源实现,其相互对应如下: Google HBase文件存储系统 GFS HDFS海量数据处理 MapReduce Hadoop ... 阅读全文
-
Lisp之魅
摘要:cat todd.log | grep programming | sort -rLisp的永恒之道Lisp之魅长久以来,Lisp一直被许多人视为史上最非凡的编程语言。它不仅在50多年前诞生的时候带来了诸多革命性的创新并极大地影响了后来编程语言的发展,即使在一大批现代语言不断涌现的今天,Lisp的诸多特性仍然未被超越。当各式各样的编程语言摆在面前,我们可以从运行效率、学习曲线、社区活跃度、厂商支持等多种不同的角度进行评判和选择,但我特别看中的一点在于语言能否有效地表达编程者的设计思想。学习C意味着学习如何用过程来表达设计思想,学习Java意味着学习如何用对象来表达设计思想,而虽然Lisp与函数 阅读全文
-
HBase 系统架构
摘要:HBase是Apache Hadoop的数据库,能够对大型数据提供随机、实时的读写访问。HBase的目标是存储并处理大型的数据。HBase是一个开源的,分布式的,多版本的,面向列的存储模型。它存储的是松散型数据。HBase特性:1 高可靠性2 高效性3 面向列4 可伸缩5 可在廉价PC Server搭建大规模结构化存储集群HBase是Google BigTable的开源实现,其相互对应如下: Google HBase文件存储系统 GFS HDFS海量数据处理 MapReduce Hadoop MapRed... 阅读全文
-
NewLife.Xcode组件资源目录
摘要:为了让大家更好的了解和学习Newlife.Xcode,在征得石头的同意后,特在此文中发布Xcode的相关信息。也劳烦感兴趣的朋友不要吝啬几分钟时间,看完此文,将对你入门、了解、应用Xcode有很多好处。在信息日益发达的时代,学会学习也是一种能力。先发布日常用的Newlife.Xcode的资源:1.QQ群:16008002.博客:http://www.cnblogs.com/nnhy/、http://www.cnblogs.com/asxinyu/3.论坛:http://www.53wb.com/4.开源:http://xcode.codeplex.com/下面是几点说明:1.此文将持续更新,1 阅读全文