从程序员到CTO的Java技术路线图

Posted on

从程序员到CTO的Java技术路线图 **

在技术方面无论我们怎么学习,总感觉需要提升自已不知道自己处于什么水平了。但如果有清晰的指示图供参考还是非常不错的,这样我们清楚的知道我们大概处于那个阶段和水平。

Java程序员

高级特性

          反射、泛型、注释符、自动装箱和拆箱、枚举类、可变

          参数、可变返回类型、增强循环、静态导入

    核心编程

         IO、多线程、实体类、

         集合类、正则表达式、

         XML和属性文件

         图形编程

         AWT(Java2D/JavaSound/JMF)、Swing、SWT、JFace

    网路编程

        Applet、Socket/TCP/UDP、NIO、RMI、CORBA

   Java语法基础

       类、抽象类、接口、最终类、静态类、匿名类、内部类、异常类、编码规范

  Java开发环境

      JDK、JVM、Eclipse、Linux

Java核心编程技术

Java,设计而又非常精巧的语言。学习Java,须从Java开发环境开始,到Java语法,再到Java的核心API。

    1.Java开发入门:Java开发环境的安装与使用,包括JDK命令、EclipseIDE、Linux下Java程序的开发和部署等。

    2.Java语法基础:基于JDK和Eclipse环境,进行Java核心功能开发,掌握Java面向对象的语法构成,包括类、抽象类、接口、最终类、静态类、匿名类、内部类、异常的编写。

    3.Java核心API:基于JDK提供的类库,掌握三大核心功能:

    A。Java核心编程:包括Java编程的两大核心功能——Java输入/输出流和多线程,以及常用的辅助类库——实体类、集合类、正则表达式、XML和属性文件。

    B。Java图形编程:包括Sun的GUI库AWT(Java2D、JavaSound、JMF)和Swing,IBM和GUI库SWT和Jface;

    C. Java网路编程:Applet组件编程,Socket编程,NIO非阻塞Socket编程、RMI和CORBA分布式开发。

    4.Java高级特性:掌握JDK1.4、JDK5.0、JDK6.0中的Java高级特性,包括反射、泛型、注释,以及java高级特性——自动装箱和拆箱、枚举类、可变参数、可变返回类型、增强循环、静态导入等。

JavaEE初级软件工程师

JSF框架开发技术

   配置文件(页面导航、后台Bean)、JSF组件库(JSF EL语言、HTML标签、事件处理、)、JSF核心库(格式转换、输入验证、国际化)

Javaweb核心开发技术

   开发环境(Eclipse、Linux)

   三大组件(JSP、JavaBean、Servlet)

   扩展技术(EL、JSTL、Taglib)

网页开发技术

   HTML、XML、CSS、JavaScript、AJAX

   数据库设计技术

   SQL、MySql、Oracle、SQLServer、JDBC

Web服务器(Tomcat/Jetty/Resin/JBossWeb)

JavaWeb核心技术:

    JavaWeb项目开发的全过程可以分解为:

   网页开发+数据库设计——>JavaWeb项目开发,其中,javaWeb由6项基本技术组成:JSP+JavaBean+Servlet+EL+JSTL+Taglib,而JSF正是将这6种技术进行有机结合的技术框架:

JavaEE中级软件工程师

四种经典架构SSH1、SSI1、SSH2、SSI2

    Struts1表现层框架

  入门配置、核心组件、标签库、国际化、数据检验、数据库开发、Sitemesh集成、集成Hibernate/iBATIS

    Struts2表现层框架

           入门配置、核心组件、标签库、国际化、数据校验、Sitemesh集成转换器、拦截器、集成Hibernate/iBATIS

    Spring业务层框架

          入门配置、IoC容器、MVC、标签库、国际化、数据校验、数据库开发

    Hibernate持久层框架

        MySQL、Oracle、SQLServer iBATIS持久层框架

        MySQL、Oracle、SQLServer

Web服务器(Tomcat/Jetty/Resin/JBossWeb)

Java高级软件工程师

javaWeb开源技术与框架

    工作流、

规则引擎

搜索引擎、

缓存引擎 、

    任务调度、

身份认证

    报表服务、

系统测试、

    集群、

负载平衡、

故障转移

JavaWeb分布式开发技术

JTA(Java事物管理)

  JAAS(Java验证和授权服务)

  JNDI(Java命名和目录服务)

  JavaMail(Java邮件服务)

JMS(java信息服务)

WebService(web服务)

JCA(java连接体系)

JMS(java管理体系)

应用服务器(JBossAS/WebLogic/WebSphere)

JavaEE系统架构师

    面向云架构(COA)

        COA、SaaS、网格计算、集群计算、分布式计算、云计算

    面向资源架构(ROA)

        ROA、RESI

    面向web服务架构(SOA)

       WebService、SOA、SCA、ESB、OSGI、EAI

    Java设计模式

      创建式模式:抽象工厂/建造者/工厂方法/原型/单例

      构造型模式:适配器/桥接/组合/装饰/外观/享元/代理

      行为型模式:责任链/命令/解释器/迭代子/中介者/备忘录/观察者/状态/策略/模板方法/访问者

   Java与UML建模

      对象图、用例图、组件图、部署图、序列图、交互图、活动图、正向工程与逆向工程

CTO首席技术官

     发展战略

     技术总监

     团队提升

     团队建设

     项目管理

     产品管理

企业级项目实战(带源码)地址**:**http://zz563143188.iteye.com/blog/1825168

收集五年的开发资料下载地址: http://pan.baidu.com/share/link?shareid=372668&uk=4076915866/#dir/path=%2F%E5%AD%A6%E4%B9%A0%E6%96%87%E4%BB%B6

下面的更深入的有兴趣可以了解一下,我的目的不是要大家掌握下面的知识,只是希望扩展自己的思维,摘自牛人的技术博客。

///////////////////////////////////////////////////牛人必看/////////////////////////////////////////////////////////////////*/

系统后台框架:

前端工程师技能:

B2C电子商务基础系统架构解析 运营B2C日 久,越来越深刻的意识到IT系统对确保规范化业务流转,支撑消费者端的均一服务有着决定性的作用。于是,一直想好好整理下相关的系统架构,怎奈俗务缠身, 一直拖到今日,猛然发现下周娃很可能就要出生,拖无可拖,快马加笔,居然整出来了。本文的重点是理清系统的逻辑关系,详细的功能模块请参见结尾附上的系统 架构图。 首先,聊下对系统逻辑架构的看法;我个人始终坚持认为,系统的开发与演化,前台严格follow消费者的购买流程,后台则盯牢订单流转,牢牢抓住这两条主线,才能高屋建瓴的看清B2C的逻辑链和数据流,更深刻的规划功能模块,从而更有效支撑实际业务的流转。 前台系统包括:商品展示,内容展示,订单确认,支付系统,用户中心四大模块 一,商品展示 按照Ebay的内部分类,任何将商品以单个或批量的方式展示给消费者的功能均应归入此系统。因此,该系统至少包括: A,站内搜索(搜索提示,搜索规则,搜索成功页,搜索不成功页,相似推荐) B,导航(频道导航,其他导航如销售排行,广告位,推荐位,文字链,Also buy等) C,商品分类(品牌分类,品类分类,属性分类如剪裁形式) D, 登陆页(商品列表页,商品详细页,商品活动页) 这里的访问逻辑是:A /B/C分流消费者去往相对个性化的页面,由登陆页体现商家的核心诉求和价值传递,完成call-to-action的第一步。 二,内容展示 内容展示较为简单,对纯购物品牌而言包括: A,公告区 B,帮助中心 C,论坛(如需商城与论坛发生交互,则需自行开发,否则可集成discuz做同步登陆即可) 大家都知道,就不多说了。 三,订单确认 订单确认,就是帮助消费者正确提交订单信息的环节,看似简单,实则非常复杂,需要对很多信息逻辑判断和处理,一般由2个部分组成: A,购物车(购物车浮层,购物车页面,无注册购买) 无注册购买是需要慎用的功能,除非刻意追求用户的短平快下单,如团购/换购,一般不推荐使用,会造成系统异常复杂,开发量也很大。 B,订单提交(返回购物车,收货地址&地址薄,支付方式判断,配送方式,发票,订单标记,实付金额计算等等) 值得一提的是,几乎大多数的促销逻辑运算在这个环节完成,充分考虑各种促销方式之间的互斥与重叠是系统设计的核心,需要充分考虑各种情况,避免出现逻辑漏洞。 四,支付系统 与一般的想象不同,支付系统其实并不简单等于第三方支付工具接入: A,外部支付系统(支付宝将接口,财付通接口,网银直联端口,信用ka分期端口) B,内部支付系统(账户余额,积分,礼品卡,优惠券) 支付系统的逻辑设计不但需要考虑到各种极端情况的发生(如一张订单先用礼品卡,再用积分,最后网银支付),还要预留财务做账所需的相关字段,并充分考虑订单取消之后如何回滚各类内部账户。 五,用户中心 用户中心的实质是用户自助功能的dashboard,一般4个部分组成: A,注册&登陆(快速注册,完整注册,注册有礼,推荐注册,密码找回,主站id登陆,open-id登陆如QQ,新浪微博等) B,订单中心(历史订单状态,中间状态订单修改,物流追踪) C,服务中心(各类自助服务如退款申请,退换货申请,建议与投诉等) D, 信息管理(用户基本信息管理和账户信息管理) 用户中心的价值在于:尽可能引导用户自行获取所需的信息并提交所需的服务,在提升服务准确率,及时性的同时降低对人工成本。 后台系统包括:商品&促销,CRM,订单处理,WMS,采购管理,财务管理,报表管理,系统设置,WA系统9大模块 一, 商品&促销 商品&促销模块的核心在于确保消费者下单之前,前台内容所见即所得 A, 商品管理(品类管理,品牌管理,单品管理) B, 促销管理(活动管理和自定义活动模板管理) 在上述模块中,最重要的是2个部分:单品管理中的批量产品生成的自动程序和活动管理中“共享与互斥”管理。前者用于大幅提升上新速度,后者避免促销活动失控。 二, CRM CRM是对B2C核心资源—会员的管理,服务与再营销系统,包括如下部分: A,会员管理(会员信息的增删改查和到其他系统的链接) B,用户关怀(条件触发和人工触发相关EDM & 短信 & OB) C,定向营销(会员分组和营销活动管理) D, 客服管理(内容非常多,集成所有需前台与后台交互的功能,详情还是看图吧) E, 呼叫中心(IVR,坐席管理,统计报表,参数传递与窗口嵌入) 值得注意的,EDM和短信通道市面上已经有成熟的外包服务商,一般都会外包;呼叫中心和在线客服自行开发成本太高,特别是呼叫中心系统,业务初期也都是外包的。 三, 订单处理 订单处理是在订单未正式进入仓储部门处理之前,对订单的前置性处理环节。 A,订单录入(电话订购,网上下单,外部团购订单,无金额订单录入如礼品单) B,订单审核(自动审核和人工审核) C,RMA处理(RMA申请单和RMA处理单) RMA的逻辑也异常复杂,需要在效率和成本之间找平衡,确保在不拖垮仓储部门的正常出入库的前提下对消费者端快速有效close工单;对内部则需要控制成本,货损不能超过预算上限。 四, WMS(Warehouse Management system仓库管理系统) WMS的流程很长,功能模块也很多,大致分为入库管理,库存管理,出库管理和票据管理4个模块四个模块,细细道来就是另外一篇文章了,各位可以参考 我这篇文章:庖丁解牛—B2C仓储内部运作解密(上,中,下)http://blog.sina.com.cn/wangxida0855 五, 采购管理 采购管理的核心是有效跟进采购合同/发票的状态,大货的采购入库/退库,财务结算和在仓库存查询和处理。 A,供应商管理(供应商信息管理,合同发票管理) B,采购单管理(PO单管理,负PO单管理) C,库存管理(库存查询,库存占用单,库存变动log) 六, 财务管理 B2C的财务管理,主要是对供应商,渠道和内部费用支出的成本控制。 A,供应商结算 B,渠道结算 C,配送结算 D, 内部结算 说实在的,哥对财务这块也不算很了解,大家将就看看,图片上有明细。 七, 报表管理 报表是B2C业务的宏观表现,理论上说,每个部门的KPI都应该从中找到。 A,搜索报表(站内搜索量查询) B,销售报表(多个维度销量查询,优惠券使用情况,报表导出) C,财务报表 D, 客服报表(客服日报和坐席报表) 前者反映与消费者发生的日常交互(包括正常与异常),后者考核客服的工作绩效 E, 仓储物流报表 这几块报表,是业务运作的核心,涉及到公司机密,就不能写的太细了,见谅。 八, 系统设置 这块大家都知道是干嘛的,也就不多说了,分成三块。 A,基础设置(和业务有关的一些字段值) B,权限设置(不同账号的操作权限和操作记录) C,其他设置 九, WA系统(Web Analytcis) 网站分析系 统,几乎全是外购,很少有能够自建的,即使自建,最多做几个简单的模块。用于实战的,要么是免费的GA(Google Analytics),要么是昂贵的Omniture。这块的知识,细细说来也是另外一篇文章了,有兴趣的同学可以看我这篇科普文章:揭秘—我所知道的网 站分析(上,下) http://blog.sina.com.cn/wangxida0855 最后,上全系统大图,再感慨一句,B2C系统,真是一个大工程啊。

fr http://blog.sina.com.cn/s/blog_59d6717c0100syh3.html 61

4

分享到:

全国(大学)高等教育各学科视频教学全集

评论

91 楼 zz563143188 28 分钟前

openFox 写道

感谢楼主的分享精神,其实做了2年J2ee也接触了其中大部分技术,但就是学的不深入,完全停留在会用阶段。准备按着LZ的思路再详细看一遍 根据实际情况和需要学习,可以深入基础学习一下。 90 楼 openFox 30 分钟前

感谢楼主的分享精神,其实做了2年J2ee也接触了其中大部分技术,但就是学的不深入,完全停留在会用阶段。准备按着LZ的思路再详细看一遍

89 楼 zz563143188 2 小时前

jackami121 写道

LZ涉猎面真广 呵呵,还可以光注我更多博客,还有更多的惊喜等你。 88 楼 zz563143188 2 小时前

maosijun 写道

很好。 受教了 知识面有点广,希望你能根据实际情况学习。

87 楼 zz563143188 2 小时前

mikzhang 写道

zz563143188 写道

mikzhang 写道

我觉得CTO未必这些全会 当然不用全会,具体根据公司业务和规模决定的。主要是让大家知道有些知识,开拓视野。 我的意思是 你可以给出一个成为CTO的主线技术 面对大众的东西,是不能细分的。只能面面俱到,然后可以根据需要自己拉主线。 86 楼 jackami121 2 小时前

LZ涉猎面真广

85 楼 maosijun 2 小时前

很好。 受教了 84 楼 mikzhang 3 小时前

zz563143188 写道

mikzhang 写道

我觉得CTO未必这些全会 当然不用全会,具体根据公司业务和规模决定的。主要是让大家知道有些知识,开拓视野。 我的意思是 你可以给出一个成为CTO的主线技术

83 楼 zz563143188 3 小时前

iamxi 写道

这图叫扯淡,耽误无数青少年。你看CTO的都是XX管理、XX管理,这些和图下面的技术有毛线关系。要注意的是程序员的进阶中,至少有两条路线,技术路线和管理路线,如果一直走技术,可以成为某领域的大牛。如果走管理才会去努力当个CTO。 呵呵,你误会我的意思了。下面的这图不是要大家掌握,只是让看看有哪些技术。有兴趣的可以参考对比自己的不足,如果没有兴趣也就茶后饭谈聊天而已。 82 楼 iamxi 3 小时前

这图叫扯淡,耽误无数青少年。你看CTO的都是XX管理、XX管理,这些和图下面的技术有毛线关系。要注意的是程序员的进阶中,至少有两条路线,技术路线和管理路线,如果一直走技术,可以成为某领域的大牛。如果走管理才会去努力当个CTO。

81 楼 zz563143188 4 小时前

mikzhang 写道

我觉得CTO未必这些全会 当然不用全会,具体根据公司业务和规模决定的。主要是让大家知道有些知识,开拓视野。 80 楼 mikzhang 4 小时前

我觉得CTO未必这些全会

79 楼 zz563143188 4 小时前

tuweijie 写道

[color=red][/color][size=large][/size][align=center][/align][b][/b]太牛了 学习永无静止,只要有心。 78 楼 zz563143188 4 小时前

cloudzb 写道

LZ厉害!现在还是下层的人,表示压力三大! 人是没有上下层之分的,只是我比你早了一占,如果再过三年你又比刚毕业的人前进了很多,不是层次问题,而是阅历问题。

77 楼 zz563143188 4 小时前

zhongxiaweimian 写道

要学的东西还很多呢 根据自己需要学习,在有多余的时间再学习自己喜欢的。 76 楼 tuweijie 4 小时前

[color=red][/color][size=large][/size][align=center][/align][b][/b]太牛了

75 楼 cloudzb 4 小时前

LZ厉害!现在还是下层的人,表示压力三大! 74 楼 zhongxiaweimian 5 小时前

要学的东西还很多呢

73 楼 zz563143188 20 小时前

kun20031029 写道

难得楼主这么无私奉献,先谢过了 呵呵,那就好好吸收吧。 72 楼 kun20031029 20 小时前

难得楼主这么无私奉献,先谢过了

UML 的九种模型图

Posted on

UML 的九种模型图

既然来了就要多看几篇博客, 因为每一篇都适合你。如果收藏重复看,你一定能感受到我的正能量。

UML设计九种图例

一、作为一种建模语言,UML的定义包括UML语义和UML表示法两个部分。

  • UML语义:描述基于UML的精确元模型定义。

  • UML表示法:定义UML符号的表示法,为开发者或开发工具使用这些图形符号和文本语法为系统建模提供了标准。这些图形符号和文字所表达的是应用级的模型,在语义上它是UML元模型的实例。 二、标准建模语言UML可以由下列5类图来定义。

  • 用例图:从用户角度描述系统功能,并指出各功能的操作者。

  • 静态图:包括类图和对象图。类图描述系统中类的静态结构,不仅定义系统中的类,表示类之间的联系,如关联、依赖、聚合等,也包括类的属性和操作,类图描述的是一种静态关系,在系统的整个生命周期都是有效的。对象图是类图的实例,几乎使用与类图完全相同的标识。一个对象图是类图的一个实例。由于对象存在生命周期,因此对象图只能在系统某一时间段存在。

  • 行为图:描述系统的动态模型和组成对象间的交互关系,包括状态图和活动图。状态图描述类的对象所有可能的状态以及事件发生时状态的转移条件,状态图是对类图的补充,活动图描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并进行活动。

  • 交互图:描述对象间的交互关系,包括时序图和协作图。时序图显示对象之间的动态合作关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互;协作图描述对象间的协作关系,协作图跟时序图相似,显示对象间的动态合作关系。除显示信息交换外,协作图还显示对象以及它们之间的关系。如果强调时间和顺序,则使用时序图;如果强调上下级关系,则选择协作图。

  • 实现图:包括组件图和部署图。组件图描述代码部件的物理结构及各部件之间的依赖关系,组件图有助于分析和理解部件之间的相互影响程度;部署图定义系统中软硬件的物理体系结构。

采用UML来设计系统时,第一步是描述需求;第二步根据需求建立系统的静态模型,以构造系统的结构;第三步是描述系统的行为。其中在第一步与第二步中所建立的模型都是静态的,包括用例图、类图、对象图、组件图和部署图等5种图形,是标准建模语言UML的静态建模机制。其中第三步中所建立的模型或者可以执行,或者表示执行时的时序状态或交互关系。它包括状态图、活动图、时序图和协作图等4种图形,是标准建模语言UML的动态建模机制。

首先对UML中的各个图的功用做一个简单介绍: 1、用例图

描述角色以及角色与用例之间的连接关系。说明的是谁要使用系统,以及他们使用该系统可以做些什么。一个用例图包含了多个模型元素,如系统、参与者和用例,并且显示了这些元素之间的各种关系,如泛化、关联和依赖。

2、类图

类图是描述系统中的类,以及各个类之间的关系的静态视图。能够让我们在正确编写代码以前对系统有一个全面的认识。类图是一种模型类型,确切的说,是一种静态模型类型。

3、对象图

与类图极为相似,它是类图的实例,对象图显示类的多个对象实例,而不是实际的类。它描述的不是类之间的关系,而是对象之间的关系。

4、活动图

描述用例要求所要进行的活动,以及活动间的约束关系,有利于识别并行活动。能够演示出系统中哪些地方存在功能,以及这些功能和系统中其他组件的功能如何共同满足前面使用用例图建模的商务需求。

5、状态图

描述类的对象所有可能的状态,以及事件发生时状态的转移条件。可以捕获对象、子系统和系统的生命周期。他们可以告知一个对象可以拥有的状态,并且事件(如消息的接收、时间的流逝、错误、条件变为真等)会怎么随着时间的推移来影响这些状态。一个状态图应该连接到所有具有清晰的可标识状态和复杂行为的类;该图可以确定类的行为,以及该行为如何根据当前的状态变化,也可以展示哪些事件将会改变类的对象的状态。状态图是对类图的补充。

6、序列图(顺序图)

序列图是用来显示你的参与者如何以一系列顺序的步骤与系统的对象交互的模型。顺序图可以用来展示对象之间是如何进行交互的。顺序图将显示的重点放在消息序列上,即强调消息是如何在对象之间被发送和接收的。

7、协作图

和序列图相似,显示对象间的动态合作关系。可以看成是类图和顺序图的交集,协作图建模对象或者角色,以及它们彼此之间是如何通信的。如果强调时间和顺序,则使用序列图;如果强调上下级关系,则选择协作图;这两种图合称为交互图。

8、构件图 (组件图)

描述代码构件的物理结构以及各种构建之间的依赖关系。用来建模软件的组件及其相互之间的关系,这些图由构件标记符和构件之间的关系构成。在组件图中,构件时软件单个组成部分,它可以是一个文件,产品、可执行文件和脚本等。

9、部署图 (配置图)

是用来建模系统的物理部署。例如计算机和设备,以及它们之间是如何连接的。部署图的使用者是开发人员、系统集成人员和测试人员。

几种图的区别:

一:这九种模型图各有侧重,

1:用例图侧重描述用户需求,

2:类图侧重描述系统具体实现;

二:描述的方面都不相同,

1:类图描述的是系统的结构,

2:序列图描述的是系统的行为;

三:抽象的层次也不同,

1:构件图描述系统的模块结构,抽象层次较高,

2:类图是描述具体模块的结构,抽象层次一般,

3:对象图描述了具体的模块实现,抽象层次较低。

在有的文献书籍中,将这九种模型图分为三大类:

结构分类、动态行为和模型管理:

1:结构分类包括用例图、类图、对象图、构件图和部署图,

2:动态行为包括状态图、活动图、顺序图和协作图,

3:模型管理则包含类图。

画图说明 UML(统一建模语言):是面向对象的可视化建模的一种语言。是数据库设计过程中,在E-R图(实体-联系图)的设计后的进一步建模。 UML中有3种构造块:事物、关系和图,事物是对模型中最具有代表性的成分的抽象;关系是把事物结合在一起;图聚集了相关的的事物。具体关系图标如下:

说明: 构件事物是名词,是模型的静态部分。 行为事物是动态部分,表示行为。 分组事物是组织部分。 注释事物是解释部分。 依赖:一个事物变化会引起另一个事物变化。 聚集:特殊的关联,描述整体与部分的组合关系。 泛化:是一种特殊与一般的关系,如子元素(特殊)与父元素(一般),箭头指向父元素。 实现:类元之间的关系,其中一个类元指定了由另一个类元保证执行的契约。一般用在接口和实现他们的类之间或用例和实现它们的协作之间。

UML提供9种视图:类图、对象图,用例图,序列图、协作图,状态图、活动图,构件图和部署图。 在UML系统开发中有三个主要的模型:

功能模型: 从用户的角度展示系统的功能,包括用例图。 对象模型: 采用对象,属性,操作,关联等概念展示系统的结构和基础,包括类图。 动态模型: 展现系统的内部行为。 包括序列图,活动图,状态图。 下面具体说明:

1.类图:描述一组对象、接口、协作等事物之间的关系。如下图(摘自网络):

注:/#表示protected,+表示Public,-表示private

2.对象图:描述一组对象之间的关系,是具有具体属性值和行为的一个具体事物,其是类图中所建事物实例的静态快照,其与类图的主要区别是一个是抽象的,而对象图是具体的。如下图(摘自网络):

3.用例图:描述一组用例、参与者以及它们之间的关系,其展示的是该系统在它的外面环境中所提供的外部可见服务。如下图(摘自网络):

4.交互图:包括序列图(顺序图)和协作图,两者对应,顺序图是强调消息时间顺序,有对象生命线和控制焦点。协作图是强调接收和发送消息的对象的结构组织,有路径和顺序号。如下图(摘自网络):

序列图:

5.协作图:

6.状态图:展示了一个状态机,由状态、转换、事件和活动组成。强调事件行为的顺序。如下图(摘自网络):

7.活动图:是一种特殊的状态图,实现一个活动到另一个活动的流程。如下图(摘自网络):

8.构件图 9.部署图:构件图展示一组构件之间的组织和依赖关系,并以全局的模型展示出来。部署图是构件的配置及描述系统如何在硬件上部署。如下图(摘自网络):

企业级项目实战(带源码)地址**http://zz563143188.iteye.com/blog/1825168 收集五年的开发资料下载地址: http://pan.baidu.com/share/link?shareid=372668&uk=4076915866/#dir/path=%2F%E5%AD%A6%E4%B9%A0%E6%96%87%E4%BB%B6**


http://ibingle.blog.sohu.com/176849217.html

  • 大小: 54.4 KB

  • 大小: 25.7 KB

  • 大小: 29.1 KB

  • 大小: 29.1 KB

  • 大小: 26.7 KB

  • 查看图片附件

分享到: Oracle笔记 五、创建表、约束、视图、索引 ... | UML中数据流图,用例图,类图,对象图,角 ...

  • 2013-04-03 10:15

PowerDesinger逆向数据库物理模型及关系图

Posted on

PowerDesinger逆向数据库物理模型及关系图

既然来了就要多看几篇博客, 因为每一篇都适合你。如果收藏重复看,你一定能感受到我的正能量。

利用PowerDesinger生成的数据库物理模型及关系图

下载地址: http://pan.baidu.com/share/link?shareid=372668&uk=4076915866

数据库建模的过程中,需要运用PowerDesigner进行数据库设计,这个不但让人直观的理解模型,而且可以充分的利用数据库技术,优化数据库的设计。第一次用PowerDesigner并不感到很陌生,里面与SQLServer建立数据库差不多。

[2]其次就是ER图,在数据库系统概论中有涉及到,这个实体关系图中,一个实体对于一个表,实体、属性与联系是进行系统设计时要考虑的三个要素,也是一个好的数据库设计的核心。 正文:

利用PowerDesinger逆向数据物理模型及关系图,第一步是建立ODBC数据源,然后再利用powerdesinger连接ODBC数据源管理数据。 步骤:

  1. 首先建立odbc数据源,开始->控制面板->管理工具->数据源(odbc)->系统DSN->添加数 据库驱动(本人是用的oracle。所以就使用 oracle in oraDb10g_home驱动), 建立好数据源测试成功即可。

2.添加myo数据源,添加数据源以后测试连接是否成功。

3.通过powerdesinger逆向工程->数据库得到数据库物理模型。

4.选择数据库类型,建立ODBC连接

5.配置数据源,可能已经存在的数据源,也可以新建数据源

6.如果已存在myo数据源则不需要新建,如果没有则需要新建数据源。配置后测试数据库连接后,即可逆向数据库模型。

7.powerdesinger显示逆向的所有表,并即将生成物理模型和关系实体图。

8.显示出表的结构信息,并可以重新编译生成。

9.powerdesinger为我们建立好数据库关系图,看上去是不是很专业。

  • 大小: 127 KB

  • 大小: 84.4 KB

  • 大小: 77.7 KB

  • 大小: 129.9 KB

  • 大小: 84.7 KB

  • 大小: 137.2 KB

  • 大小: 94.7 KB

  • 大小: 105.1 KB

  • 大小: 259.4 KB

  • 大小: 269 KB

  • 查看图片附件

3

1

解决wordpress安装删除主题插件需要FTP用户名密码的问题 就是爱玩

Posted on

解决wordpress安装删除主题插件需要FTP用户名密码的问题 就是爱玩

就是爱玩

免费资源分享,网络编程技术

« android手机代理翻墙设置教程

WordPress获取制定指定分类文章数量 »

解决wordpress安装删除主题插件需要FTP用户名密码的问题

VPS 安装wordpress后,在后台自动升级时,或者更新、删除主题或者插件的时候,如果提示需要输入FTP账户信息,然而即使我们正确输入了FTP用户名 和密码也无法完成升级,这个是服务器端的权限设置问题,不是用户的问题。如果你是管理员,也遇到了这样的问题(新手)下面提供几个方法以供大家参考:

一、如果使用虚拟主机

方法1、可以在wp-config.php里加入下面代码: 1 2 3define("FS_METHOD", "direct"); define("FS_CHMOD_DIR", 0777); define("FS_CHMOD_FILE", 0777);

方法2、拷贝下面的代码到wp-config.php中的?>之前

1 2 3 4 5/// Override default file permissions /*/ if(is_admin()) { add_filter('filesystem_method',create_function('$a','return "direct";')); define('FS_CHMOD_DIR', 0751); }

方法3、修改FTP相关信息之后,拷贝代码到wp-config.php的?>之前

1 2 3 4 5 6///added ftp login credentials to avoid the annoying prompt asking for login info every time I wanted to upgrade a plugin/ define('FTP_HOST', 'ftp.yoursite.com'); define('FTP_USER', 'Your_FTP_Username'); define('FTP_PASS', 'Your_FTP_password'); ///If you can use a SSL connection set this to true/ define('FTP_SSL', true);

二、如果使用独立服务器或VPS,可以修改网站所在目录属性:

1 2chmod -R 755 /home/wwwroot chown -R www /home/wwwroot

其实出现这个的问题就是Apache/Nginx的执行身份非文件属主身份。

解决方法: 假设你的wordpress安装目录为/home/wwwroot/wordpress 执行: 1chown -R www /home/wwwroot/wordpress

执行上面的命令就可以将/home/wwwroot/wordpress下所有文件的属主改为www,

“www”换成你自己的ftp用户名,“/home/wwwroot/wordpress”换成你自己的wordpress安装目。

这样就可以解决自动更新必须填FTP的问题。

注意:

1,必须是把wordpress程序文件上传到空间以后再执行该命令,顺序不能颠倒;

2,添加完虚拟主机以后,也必须把wordpress程序文件上传到空间以后,再执行该命令才有效!

若出现了这个问题,不仅后台安装不了插件或主题,在ftp的wordpress目录下也是上传不了文件的,(折磨了我很久。。。)

via:www.byncc.com/04-kloxowp.html wordpress

版权所有:解决wordpress安装删除主题插件需要FTP用户名密码的问题 | 就是爱玩 本文链接:http://94iw.com/wordpress-ftp-password 版权声明:除非注明,本站所有文章皆为原创,转载请以链接形式标明本文地址

这篇文章由 就是爱玩 于 2011年8月20日 16:49 发表在 技巧 您可以订阅 RSS 2.0 也可以发表 评论引用 到您的网站 打印

/#1安问 发表于 1 年前 嗯,多谢啦~写的挺好

回复 引用

  • 就是爱玩

/#2就是爱玩 发表于 1 年前 客气了

回复 引用

  • 洋洋

/#3洋洋 发表于 1 年前 kloxo自动安装里就不会出现这种情况。

回复 引用

  • 小文

/#4小文 发表于 2 月前 我根据管理的方法操作,但是有的数据加上去无法再浏览网页了,我用的是SF空间,在之后我发现了一个有趣的事是,即使需要输入FTP账户密码设置了777权限但是还是无法安装,显示错误是:无法连接到 FTP 服务器 web.sf.net:21 但是我通过实验发现端口出现了问题,我使用的是22端口,但是WP自动默认的是21端口,但是我不知道如何修改端口,若管理知道如何修改可以帮助我,我非常感谢!

回复 引用

输入评论内容

您可以使用这些 HTML 标签:

:ymy: :wink: :see: :sbq: :roll: :mrgreen: :lol: :idea: :gl: :gg: :evil: :cry: :cool: :arrow: :?: :-x :-o :-P :-D :-@ :-? :) :( :!: :!!!:

  1. wordpress更换空间和域名方法
  2. 主题 mystique 3.1 中文语言包下载
  3. mystique 3.0.9 中文语言包
  4. TinyMCE Xiami Music音乐插件
  5. 利用.htaccess文件加速wordpress
  6. WordPress获取制定指定分类文章数量

2013 年一月

周日 周一 周二 周三 周四 周五 周六 12345 6789101112 13141516171819 20212223242526 2728293031

记住我

忘记密码 注册账号

公司简介&nbs...... 2012.06.17")

  • 热评文章

  • 热门标签

0fees aaa logo cpanel DirectAdmin EclipsePHP extract freehost gofreeserve guru-host host-stage infinite serve instantfreesite iPanel ip地址 kilu.de koolserve logo制作 mystique orangeserve php查ip php空间 Positive Hosting pos机 squareserve SSH TrixieHost VistaPanel WHM wordpress 主题汉化 代理 便民支付 免费空间 全能空间 即时激活 在线解压 建站工具 拉卡拉 收款宝 无限空间 测试 稳定空间 纯真ip 翻墙 远程下载

主题 (2) 免费空间 (49) 建站工具 (4) 建站技术 (4) 技巧 (5) 插件 (1) 爱玩手机 (2) 电脑技巧 (5) 网络编程 (3) 销售业务 (7)

WP-标签云 by 94iw.com and 就是爱玩 要求 Flash Player 9 or better.

本站程序由 Wordpress 驱动 | 主题由 digitalnature 设计 | 版权为 就是爱玩 所有

网站统计 我要啦免费统计 回到页顶

8种Nosql数据库系统对比

Posted on

8种Nosql数据库系统对比

导读:Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型nosql数据库的文章。

虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破。这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举。

但是NoSQL数据库之间的不同,远超过两 SQL数据库之间的差别。这意味着软件架构师更应该在项目开始时就选择好一个适合的 NoSQL数据库。针对这种情况,这里对CassandraMongodbCouchDBRedisRiakMembaseNeo4jHBase 进行了比较:

(编注1:NoSQL:是一项全新的数据库革命性运动,NoSQL的拥护者们提倡运用非关系型的数据存储。现今的计算机体系结构在数据存储方面要求具 备庞大的水平扩 展性,而NoSQL致力于改变这一现状。目前Google的 BigTable 和Amazon 的Dynamo使用的就是NoSQL型数据库。 参见NoSQL词条。)

1. CouchDB

  • 所用语言: Erlang
  • 特点:DB一致性,易于使用
  • 使用许可: Apache
  • 协议: HTTP/REST
  • 双向数据复制,
  • 持续进行或临时处理,
  • 处理时带冲突检查,
  • 因此,采用的是master-master复制(见编注2)
  • MVCC – 写操作不阻塞读操作
  • 可保存文件之前的版本
  • Crash-only(可靠的)设计
  • 需要不时地进行数据压缩
  • 视图:嵌入式 映射/减少
  • 格式化视图:列表显示
  • 支持进行服务器端文档验证
  • 支持认证
  • 根据变化实时更新
  • 支持附件处理
  • 因此, CouchApps(独立的 js应用程序)
  • 需要 jQuery程序库

最佳应用场景:适用于数据变化较少,执行预定义查询,进行数据统计的应用程序。适用于需要提供数据版本支持的应用程序。

例如: CRM、CMS系统。 master-master复制对于多站点部署是非常有用的。

(编注2:master-master复制:是一种数据库同步方法,允许数据在一组计算机之间共享数据,并且可以通过小组中任意成员在组内进行数据更新。)

2. Redis

  • 所用语言:C/C++
  • 特点:运行异常快
  • 使用许可: BSD
  • 协议:类 Telnet
  • 有硬盘存储支持的内存数据库,
  • 但自2.0版本以后可以将数据交换到硬盘(注意, 2.4以后版本不支持该特性!)
  • Master-slave复制(见编注3)
  • 虽然采用简单数据或以键值索引的哈希表,但也支持复杂操作,例如 ZREVRANGEBYSCORE。
  • INCR & co (适合计算极限值或统计数据)
  • 支持 sets(同时也支持 union/diff/inter)
  • 支持列表(同时也支持队列;阻塞式 pop操作)
  • 支持哈希表(带有多个域的对象)
  • 支持排序 sets(高得分表,适用于范围查询)
  • Redis支持事务
  • 支持将数据设置成过期数据(类似快速缓冲区设计)
  • Pub/Sub允许用户实现消息机制

最佳应用场景:适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。

例如:股票价格、数据分析、实时数据搜集、实时通讯。

(编注3:Master-slave复制:如果同一时刻只有一台服务器处理所有的复制请求,这被称为 Master-slave复制,通常应用在需要提供高可用性的服务器集群。)

3. MongoDB

  • 所用语言:C++
  • 特点:保留了SQL一些友好的特性(查询,索引)。
  • 使用许可: AGPL(发起者: Apache)
  • 协议: Custom, binary( BSON)
  • Master/slave复制(支持自动错误恢复,使用 sets 复制)
  • 内建分片机制
  • 支持 javascript表达式查询
  • 可在服务器端执行任意的 javascript函数
  • update-in-place支持比CouchDB更好
  • 在数据存储时采用内存到文件映射
  • 对性能的关注超过对功能的要求
  • 建议最好打开日志功能(参数 –journal)
  • 在32位操作系统上,数据库大小限制在约2.5Gb
  • 空数据库大约占 192Mb
  • 采用 GridFS存储大数据或元数据(不是真正的文件系统)

最佳应用场景:适用于需要动态查询支持;需要使用索引而不是 map/reduce功能;需要对大数据库有性能要求;需要使用 CouchDB但因为数据改变太频繁而占满内存的应用程序。

例如:你本打算采用 MySQL或 PostgreSQL,但因为它们本身自带的预定义栏让你望而却步。

4. Riak

  • 所用语言:Erlang和C,以及一些Javascript
  • 特点:具备容错能力
  • 使用许可: Apache
  • 协议: HTTP/REST或者 custom binary
  • 可调节的分发及复制(N, R, W)
  • 用 JavaScript or Erlang在操作前或操作后进行验证和安全支持。
  • 使用JavaScript或Erlang进行 Map/reduce
  • 连接及连接遍历:可作为图形数据库使用
  • 索引:输入元数据进行搜索(1.0版本即将支持)
  • 大数据对象支持( Luwak)
  • 提供“开源”和“企业”两个版本
  • 全文本搜索,索引,通过 Riak搜索服务器查询( beta版)
  • 支持Masterless多站点复制及商业许可的 SNMP监控

最佳应用场景:适用于想使用类似 Cassandra(类似Dynamo)数据库但无法处理 bloat及复杂性的情况。适用于你打算做多站点复制,但又需要对单个站点的扩展性,可用性及出错处理有要求的情况。

例如:销售数据搜集,工厂控制系统;对宕机时间有严格要求;可以作为易于更新的 web服务器使用。

5. Membase

  • 所用语言: Erlang和C
  • 特点:兼容 Memcache,但同时兼具持久化和支持集群
  • 使用许可: Apache 2.0
  • 协议:分布式缓存及扩展
  • 非常快速(200k+/秒),通过键值索引数据
  • 可持久化存储到硬盘
  • 所有节点都是唯一的( master-master复制)
  • 在内存中同样支持类似分布式缓存的缓存单元
  • 写数据时通过去除重复数据来减少 IO
  • 提供非常好的集群管理 web界面
  • 更新软件时软无需停止数据库服务
  • 支持连接池和多路复用的连接代理

最佳应用场景:适用于需要低延迟数据访问,高并发支持以及高可用性的应用程序

例如:低延迟数据访问比如以广告为目标的应用,高并发的 web 应用比如网络游戏(例如 Zynga)

6. Neo4j

  • 所用语言: Java
  • 特点:基于关系的图形数据库
  • 使用许可: GPL,其中一些特性使用 AGPL/商业许可
  • 协议: HTTP/REST(或嵌入在 Java中)
  • 可独立使用或嵌入到 Java应用程序
  • 图形的节点和边都可以带有元数据
  • 很好的自带web管理功能
  • 使用多种算法支持路径搜索
  • 使用键值和关系进行索引
  • 为读操作进行优化
  • 支持事务(用 Java api)
  • 使用 Gremlin图形遍历语言
  • 支持 Groovy脚本
  • 支持在线备份,高级监控及高可靠性支持使用 AGPL/商业许可

最佳应用场景:适用于图形一类数据。这是 Neo4j与其他nosql数据库的最显著区别

例如:社会关系,公共交通网络,地图及网络拓谱

7. Cassandra

  • 所用语言: Java
  • 特点:对大型表格和 Dynamo支持得最好
  • 使用许可: Apache
  • 协议: Custom, binary (节约型)
  • 可调节的分发及复制(N, R, W)
  • 支持以某个范围的键值通过列查询
  • 类似大表格的功能:列,某个特性的列集合
  • 写操作比读操作更快
  • 基于 Apache分布式平台尽可能地 Map/reduce
  • 我承认对 Cassandra有偏见,一部分是因为它本身的臃肿和复杂性,也因为 Java的问题(配置,出现异常,等等)

最佳应用场景:当使用写操作多过读操作(记录日志)如果每个系统组建都必须用 Java编写(没有人因为选用 Apache的软件被解雇)

例如:银行业,金融业(虽然对于金融交易不是必须的,但这些产业对数据库的要求会比它们更大)写比读更快,所以一个自然的特性就是实时数据分析

8. HBase

(配合 ghshephard使用)

  • 所用语言: Java
  • 特点:支持数十亿行X上百万列
  • 使用许可: Apache
  • 协议:HTTP/REST (支持 Thrift,见编注4)
  • 在 BigTable之后建模
  • 采用分布式架构 Map/reduce
  • 对实时查询进行优化
  • 高性能 Thrift网关
  • 通过在server端扫描及过滤实现对查询操作预判
  • 支持 XML, Protobuf, 和binary的HTTP
  • Cascading, hive, and pig source and sink modules
  • 基于 Jruby( JIRB)的shell
  • 对配置改变和较小的升级都会重新回滚
  • 不会出现单点故障
  • 堪比MySQL的随机访问性能

最佳应用场景:适用于偏好BigTable:)并且需要对大数据进行随机、实时访问的场合。

例如: Facebook消息数据库(更多通用的用例即将出现)

编注4:Thrift 是一种接口定义语言,为多种其他语言提供定义和创建服务,由Facebook开发并开源

当然,所有的系统都不只具有上面列出的这些特性。这里我仅仅根据自己的观点列出一些我认为的重要特性。与此同时,技术进步是飞速的,所以上述的内容肯定需要不断更新。我会尽我所能地更新这个列表。 来源: [http://blog.jobbole.com/1344/](http://blog.jobbole.com/1344/)

Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vsHBase vs Couchbase vs Neo4j vs Hypertable vsElasticSearch vs Accumulo vs VoltDB vs Scalariscomparison

(Yes it's a long title, since people kept asking me to write about this and that too :) I do when it has a point.)

While SQL databases are insanely useful tools, their monopoly in the last decades is coming to an end. And it's just time: I can't even count the things that were forced into relational databases, but never really fitted them. (That being said, relational databases will always be the best for the stuff that has relations.)

But, the differences between NoSQL databases are much bigger than ever was between one SQL database and another. This means that it is a bigger responsibility on software architects to choose the appropriate one for a project right at the beginning.

In this light, here is a comparison of Cassandra, Mongodb, CouchDB, Redis, Riak, Couchbase (ex-Membase), Hypertable, ElasticSearch, Accumulo, VoltDB, Kyoto Tycoon, Scalaris, Neo4j and HBase:

MongoDB (2.2)

  • Written in: C++
  • Main point: Retains some friendly properties of SQL. (Query, index)
  • License: AGPL (Drivers: Apache)
  • Protocol: Custom, binary (BSON)
  • Master/slave replication (auto failover with replica sets)
  • Sharding built-in
  • Queries are javascript expressions
  • Run arbitrary javascript functions server-side
  • Better update-in-place than CouchDB
  • Uses memory mapped files for data storage
  • Performance over features
  • Journaling (with --journal) is best turned on
  • On 32bit systems, limited to ~2.5Gb
  • An empty database takes up 192Mb
  • GridFS to store big data + metadata (not actually an FS)
  • Has geospatial indexing
  • Data center aware

Best used: If you need dynamic queries. If you prefer to define indexes, not map/reduce functions. If you need good performance on a big DB. If you wanted CouchDB, but your data changes too much, filling up disks.

For example: For most things that you would do with MySQL or PostgreSQL, but having predefined columns really holds you back.

Riak (V1.2)

  • Written in: Erlang & C, some JavaScript
  • Main point: Fault tolerance
  • License: Apache
  • Protocol: HTTP/REST or custom binary
  • Stores blobs
  • Tunable trade-offs for distribution and replication
  • Pre- and post-commit hooks in JavaScript or Erlang, for validation and security.
  • Map/reduce in JavaScript or Erlang
  • Links & link walking: use it as a graph database
  • Secondary indices: but only one at once
  • Large object support (Luwak)
  • Comes in "open source" and "enterprise" editions
  • Full-text search, indexing, querying with Riak Search
  • In the process of migrating the storing backend from "Bitcask" to Google's "LevelDB"
  • Masterless multi-site replication replication and SNMP monitoring are commercially licensed

Best used: If you want something Dynamo-like data storage, but no way you're gonna deal with the bloat and complexity. If you need very good single-site scalability, availability and fault-tolerance, but you're ready to pay for multi-site replication.

For example: Point-of-sales data collection. Factory control systems. Places where even seconds of downtime hurt. Could be used as a well-update-able web server.

CouchDB (V1.2)

  • Written in: Erlang
  • Main point: DB consistency, ease of use
  • License: Apache
  • Protocol: HTTP/REST
  • Bi-directional (!) replication,
  • continuous or ad-hoc,
  • with conflict detection,
  • thus, master-master replication. (!)
  • MVCC - write operations do not block reads
  • Previous versions of documents are available
  • Crash-only (reliable) design
  • Needs compacting from time to time
  • Views: embedded map/reduce
  • Formatting views: lists & shows
  • Server-side document validation possible
  • Authentication possible
  • Real-time updates via '_changes' (!)
  • Attachment handling
  • thus, CouchApps (standalone js apps)

Best used: For accumulating, occasionally changing data, on which pre-defined queries are to be run. Places where versioning is important.

For example: CRM, CMS systems. Master-master replication is an especially interesting feature, allowing easy multi-site deployments.

Redis (V2.4)

  • Written in: C/C++
  • Main point: Blazing fast
  • License: BSD
  • Protocol: Telnet-like
  • Disk-backed in-memory database,
  • Currently without disk-swap (VM and Diskstore were abandoned)
  • Master-slave replication
  • Simple values or hash tables by keys,
  • but complex operations like ZREVRANGEBYSCORE.
  • INCR & co (good for rate limiting or statistics)
  • Has sets (also union/diff/inter)
  • Has lists (also a queue; blocking pop)
  • Has hashes (objects of multiple fields)
  • Sorted sets (high score table, good for range queries)
  • Redis has transactions (!)
  • Values can be set to expire (as in a cache)
  • Pub/Sub lets one implement messaging (!)

Best used: For rapidly changing data with a foreseeable database size (should fit mostly in memory).

For example: Stock prices. Analytics. Real-time data collection. Real-time communication. And wherever you used memcached before.

Clones of Google's Bigtable

HBase (V0.92.0)

  • Written in: Java
  • Main point: Billions of rows X millions of columns
  • License: Apache
  • Protocol: HTTP/REST (also Thrift)
  • Modeled after Google's BigTable
  • Uses Hadoop's HDFS as storage
  • Map/reduce with Hadoop
  • Query predicate push down via server side scan and get filters
  • Optimizations for real time queries
  • A high performance Thrift gateway
  • HTTP supports XML, Protobuf, and binary
  • Jruby-based (JIRB) shell
  • Rolling restart for configuration changes and minor upgrades
  • Random access performance is like MySQL
  • A cluster consists of several different types of nodes

Best used: Hadoop is probably still the best way to run Map/Reduce jobs on huge datasets. Best if you use the Hadoop/HDFS stack already.

For example: Search engines. Analysing log data. Any place where scanning huge, two-dimensional join-less tables are a requirement.

Cassandra (1.2)

  • Written in: Java
  • Main point: Best of BigTable and Dynamo
  • License: Apache
  • Protocol: Thrift & custom binary CQL3
  • Tunable trade-offs for distribution and replication (N, R, W)
  • Querying by column, range of keys (Requires indices on anything that you want to search on)
  • BigTable-like features: columns, column families
  • Can be used as a distributed hash-table, with an "SQL-like" language, CQL (but no JOIN!)
  • Data can have expiration (set on INSERT)
  • Writes can be much faster than reads (when reads are disk-bound)
  • Map/reduce possible with Apache Hadoop
  • All nodes are similar, as opposed to Hadoop/HBase
  • Cross-datacenter replication

Best used: When you write more than you read (logging). If every component of the system must be in Java. ("No one gets fired for choosing Apache's stuff.")

For example: Banking, financial industry (though not necessarily for financial transactions, but these industries are much bigger than that.) Writes are faster than reads, so one natural niche is data analysis.

Hypertable (0.9.6.5)

  • Written in: C++
  • Main point: A faster, smaller HBase
  • License: GPL 2.0
  • Protocol: Thrift, C++ library, or HQL shell
  • Implements Google's BigTable design
  • Run on Hadoop's HDFS
  • Uses its own, "SQL-like" language, HQL
  • Can search by key, by cell, or for values in column families.
  • Search can be limited to key/column ranges.
  • Sponsored by Baidu
  • Retains the last N historical values
  • Tables are in namespaces
  • Map/reduce with Hadoop

Best used: If you need a better HBase.

For example: Same as HBase, since it's basically a replacement: Search engines. Analysing log data. Any place where scanning huge, two-dimensional join-less tables are a requirement.

Accumulo (1.4)

  • Written in: Java and C++
  • Main point: A BigTable with Cell-level security
  • License: Apache
  • Protocol: Thrift
  • Another BigTable clone, also runs of top of Hadoop
  • Cell-level security
  • Bigger rows than memory are allowed
  • Keeps a memory map outside Java, in C++ STL
  • Map/reduce using Hadoop's facitlities (ZooKeeper & co)
  • Some server-side programming

Best used: If you need a different HBase.

For example: Same as HBase, since it's basically a replacement: Search engines. Analysing log data. Any place where scanning huge, two-dimensional join-less tables are a requirement.

Special-purpose

Neo4j (V1.5M02)

  • Written in: Java
  • Main point: Graph database - connected data
  • License: GPL, some features AGPL/commercial
  • Protocol: HTTP/REST (or embedding in Java)
  • Standalone, or embeddable into Java applications
  • Full ACID conformity (including durable data)
  • Both nodes and relationships can have metadata
  • Integrated pattern-matching-based query language ("Cypher")
  • Also the "Gremlin" graph traversal language can be used
  • Indexing of nodes and relationships
  • Nice self-contained web admin
  • Advanced path-finding with multiple algorithms
  • Indexing of keys and relationships
  • Optimized for reads
  • Has transactions (in the Java API)
  • Scriptable in Groovy
  • Online backup, advanced monitoring and High Availability is AGPL/commercial licensed

Best used: For graph-style, rich or complex, interconnected data. Neo4j is quite different from the others in this sense.

For example: For searching routes in social relations, public transport links, road maps, or network topologies.

ElasticSearch (0.20.1)

  • Written in: Java
  • Main point: Advanced Search
  • License: Apache
  • Protocol: JSON over HTTP (Plugins: Thrift, memcached)
  • Stores JSON documents
  • Has versioning
  • Parent and children documents
  • Documents can time out
  • Very versatile and sophisticated querying, scriptable
  • Write consistency: one, quorum or all
  • Sorting by score (!)
  • Geo distance sorting
  • Fuzzy searches (approximate date, etc) (!)
  • Asynchronous replication
  • Atomic, scripted updates (good for counters, etc)
  • Can maintain automatic "stats groups" (good for debugging)
  • Still depends very much on only one developer (kimchy).

Best used: When you have objects with (flexible) fields, and you need "advanced search" functionality.

For example: A dating service that handles age difference, geographic location, tastes and dislikes, etc. Or a leaderboard system that depends on many variables.

The "long tail"

(Not widely known, but definitely worthy ones)

Couchbase (ex-Membase) (2.0)

  • Written in: Erlang & C
  • Main point: Memcache compatible, but with persistence and clustering
  • License: Apache
  • Protocol: memcached + extensions
  • Very fast (200k+/sec) access of data by key
  • Persistence to disk
  • All nodes are identical (master-master replication)
  • Provides memcached-style in-memory caching buckets, too
  • Write de-duplication to reduce IO
  • Friendly cluster-management web GUI
  • Connection proxy for connection pooling and multiplexing (Moxi)
  • Incremental map/reduce
  • Cross-datacenter replication

Best used: Any application where low-latency data access, high concurrency support and high availability is a requirement.

For example: Low-latency use-cases like ad targeting or highly-concurrent web apps like online gaming (e.g. Zynga).

Scalaris (0.5)

  • Written in: Erlang
  • Main point: Distributed P2P key-value store
  • License: Apache
  • Protocol: Proprietary & JSON-RPC
  • In-memory (disk when using Tokyo Cabinet as a backend)
  • Uses YAWS as a web server
  • Has transactions (an adapted Paxos commit)
  • Consistent, distributed write operations
  • From CAP, values Consistency over Availability (in case of network partitioning, only the bigger partition works)

Best used: If you like Erlang and wanted to use Mnesia or DETS or ETS, but you need something that is accessible from more languages (and scales much better than ETS or DETS).

For example: In an Erlang-based system when you want to give access to the DB to Python, Ruby or Java programmers.

VoltDB (2.8.4.1)

  • Written in: Java
  • Main point: Fast transactions and repidly changing data
  • License: GPL 3
  • Protocol: Proprietary
  • In-memory relational database.
  • Can export data into Hadoop
  • Supports ANSI SQL
  • Stored procedures in Java
  • Cross-datacenter replication

Best used: Where you need to act fast on massive amounts of incoming data.

For example: Point-of-sales data analysis. Factory control systems.

Kyoto Tycoon (0.9.56)

  • Written in: C++
  • Main point: A lightweight network DBM
  • License: GPL
  • Protocol: HTTP (TSV-RPC or REST)
  • Based on Kyoto Cabinet, Tokyo Cabinet's successor
  • Multitudes of storage backends: Hash, Tree, Dir, etc (everything from Kyoto Cabinet)
  • Kyoto Cabinet can do 1M+ insert/select operations per sec (but Tycoon does less because of overhead)
  • Lua on the server side
  • Language bindings for C, Java, Python, Ruby, Perl, Lua, etc
  • Uses the "visitor" pattern
  • Hot backup, asynchronous replication
  • background snapshot of in-memory databases
  • Auto expiration (can be used as a cache server)

Best used: When you want to choose the backend storage algorithm engine very precisely. When speed is of the essence.

For example: Caching server. Stock prices. Analytics. Real-time data collection. Real-time communication. And wherever you used memcached before.

Of course, all these systems have much more features than what's listed here. I only wanted to list the key points that I base my decisions on. Also, development of all are very fast, so things are bound to change. 来源: [http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis](http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis)