June 26, 2010
再谈 eBay 的扩展性最佳实践
"\u003cp\u003e很多人都觉得 eBay 在 \u003ca href=\"http://www.qconbeijing.com/\"\u003eQCon (北京)\u003c/a\u003e 上的技术\u003ca href=\"http://qconbeijing.com/Speaker.aspx?Id=8\"\u003e讲座\u003c/a\u003e不错,但对我来说,其实 冲击力没那么大了。eBay 一两年前就是这个 PPT 。不过还是比 Amazon 的 Jeff Barr 强了很多,以后要是开个什么会,你把 Jeff Barr 请来还讲那个销售文档,估计自己都不好意思。\u003c/p\u003e\n\u003cp\u003e不过,eBay 这次的PPT 总算还是有点更新的。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1)数据分片(Partition Everything)\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e说是分区(Partition),这里不能简单等同于 Oracle 的分区,理解成分片(Sharding)就好啦。可以参考一下我以前写的科普小文: \u003ca href=\"http://www.kuqin.com/database/20080825/15070.html\"\u003e开源数据库 Sharding 技术 (Share Nothing)\u003c/a\u003e。这里要强调一下的是,分片是在数据量的确有规模的时候才适合进行,如果单节点足以应付,那么还是不要冒 进。\u003c/p\u003e\n\u003cp\u003e从分片的模式上,eBay 主要根据功能切分(Functional Segmentation)和水平分割(负载均衡考虑),作为推论,所有会话都是无状态性的。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e2)异步处理(Asynchrony Everywhere)\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e其实对于任何网站来说,过度追求”同步”化设计还是比较糟糕的做法。以 …\u003c/p\u003e"
June 26, 2010
优酷网(Youku.com)架构经验
"\u003cp\u003e这次 \u003ca href=\"http://www.qconbeijing.com/\"\u003eQCon (北京)会议\u003c/a\u003e网站架构案例分析这个 Track ,虽然话题不多,但课程设计时候考虑覆盖的面还是比较广的。作为视频网站代表,优酷带来了一场包含不少实战经验的技术分享。\u003ca href=\"http://www.qconbeijing.com/Speaker.aspx?Id=29\"\u003e邱丹\u003c/a\u003e(优酷网开发副总裁,核心架 构师)可能公司的事情比较忙,一直到第二天中午才赶到会场。还半开玩笑说,’怎么这么多人,还以为是小型的会议呢’…\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2010/06/youku.com_.jpg\"\u003e\u003cimg src=\"https://blogstatic.haohtml.com//uploads/2023/09/youku.com_.jpg\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e缓存\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e缓存黄金原则:\u003cstrong\u003e让数据更靠近 CPU\u003c/strong\u003e。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eCPU--\u0026gt;CPU 一级缓存--\u0026gt;二级缓存--\u0026gt;内存--\u0026gt;硬盘--\u0026gt;LAN--\u0026gt;WAN\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e讲到了 Youku 自己的内部项目,针对大文件缓存的。目前开源软件中,Squid 的 write() 用户进程空间有消耗,Lighttpd 1.5 的 AIO(异步I/O) 读取文件到用户内存导致效率也比较低下。Youku 不用内存做缓存(避免内存拷贝,避免内存锁)。值得注意的是,缓存技术容易被滥用,也有副作用,比如接到老大哥通知要把某个视频撤下来,如果在缓存里是比 较麻烦的。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e数据库\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e优酷对数据库 Sharding 做了不少尝试,而且实现效果应该不错。DB 读写分离上有比较丰富的经验。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2010/06/Youku_Sharding.png\"\u003e\u003cimg src=\"https://blogstatic.haohtml.com//uploads/2023/09/Youku_Sharding.png\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e为了提升数据 …\u003c/p\u003e"
June 26, 2010
大量小文件的实时同步方案
"\u003cp\u003e传统的文件同步方案有rsync(单向) 和 unison(双向)等,它们需要扫描所有文件后进行比对,差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将非常耗时。而且正在发生变化的 往往是其中很少的一部分,这是非常低效的方式。\u003c/p\u003e\n\u003cp\u003e之前看了\u003ca href=\"http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf\"\u003eAmazon 的Dynamo的设计文档\u003c/a\u003e,它们每个节点的数据是通过Hash Tree来实现同步,既有通过日志来同步的软实时特点(msyql, bdb等),也可以保证最终数据的一致性(rsync, unison等)。Hash Tree的大体思路是将所有数据存储成树状结构,每个节点的Hash是其所有子节点的Hash的Hash,叶子节点的Hash是其内容的Hash。这样一 旦某个节点发生变化,其Hash的变化会迅速传播到根节点。需要同步的系统只需要不断查询跟节点的hash,一旦有变化,顺着树状结构就能够在logN级 别的时间找到发生变化的内容,马上同步。\u003c/p\u003e\n\u003cp\u003e文件系统天然的是树状结构,尽管不是平衡的数。如果文件的修改时间是可靠的,可以表征文件的变化,那就可以用它作为文件的Hash值。另一方面,文 件的修改通常是按顺序执行的,后修改的文件比早修改的文件具有更大 …\u003c/p\u003e"
June 26, 2010
手机之家网站架构的发展和变化
"\u003cp\u003e这次beta沙龙请了\u003ca href=\"http://www.paulgao.com.cn/\"\u003e高春辉\u003c/a\u003e的团队来讲他们的经验。本来我是 希望老高讲,不过他说最近的系统主要是许超前在带人开发,所以实际的演讲人是许超前。\u003c/p\u003e\n\u003cp\u003e国内最早让大家意识到网站的发展阶段的文档大概就是于敦德翻译的LiveJournal发展历程的ppt。这次许超前的演讲非常类似 LiveJournal的那篇。\u003c/p\u003e\n\u003cp\u003e手机之家用了7年时间,发展到1000万以上用户,3000万以上帖子,1.1TB附件,每天780万以上的PV这个规模。这个数字虽然比 不上大型互联网公司,但是对一个只有几个人的技术团队,已经是一个很令人骄傲的数字了。\u003c/p\u003e\n\u003cp\u003eLiveJournal在发展中一边用着开源软件,一边造轮子,最后造出来了memcached这个简单而强大的工具,最终成了这一代网站开发离不 开的东西。\u003c/p\u003e\n\u003cp\u003e这次演讲有意思的部分就是从memcached相关的事情开始的。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e一 关于memcached的应用和管理。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003ememcached确实是个简单,好用,见效快的东西。不过简单也有简单的问题,程序员各有各的习惯,结果导致key很不规范,用什么方式的都有。 这个问题恐怕用过memcached的人都深有体会。当然,用开发规范来限制程序员的行为是一 …\u003c/p\u003e"
June 26, 2010
Facebook 架构学习
"\u003cp\u003e在 QCon 2008 (旧金山站) 上Facebook 做的这个技术分享有不少值得借鉴的东西。所 以,暂停对 QCon 北京的回顾,临时插播一贴。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e设计原则\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e尽可能的使用开源软件,并且在需要优化的时候进行优化\u003c/li\u003e\n\u003cli\u003eUnix 哲学。包括,模块化原则;整合化原则;清晰化原则等\u003c/li\u003e\n\u003cli\u003e任何组件具备扩展性\u003c/li\u003e\n\u003cli\u003e最小化故障影响\u003c/li\u003e\n\u003cli\u003e简化,简化,简化!\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e架构概览\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eFacebook 是 LAMP 的坚定支持者,也差不多是用 LAMP (或许用 LAM2P 更适合) 实现的最大的动态站点。\u003cimg src=\"http://www.kuqin.com/upimg/allimg/090412/2229360.png\" alt=\"Facebook Arch Overview.png\"\u003e\u003c/p\u003e\n\u003cp\u003e基础组件加上服务,中间用自己实现的一些工具进行粘合。其中关于运维细节的事情基本不会说出来的,这是很多公司的软实力所在。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003ePHP 经验\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e参见《 \u003ca href=\"http://www.kuqin.com/web/20080410/6398.html\"\u003eFacebook 的 PHP 性能与扩展性\u003c/a\u003e》\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eMySQL 经验\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e主要用于做 Key-Value 类型的存储操作,数据随机分布在多台逻辑实例上,访问多数基于全局 ID 。\u003c/li\u003e\n\u003cli\u003e逻辑实例分散在多台物理主机上(超过1800台),负载均衡在物理层进行。\u003c/li\u003e\n\u003cli\u003e不做读复制。\u003c/li\u003e\n\u003cli\u003e尽量不做逻辑数据迁移(成本太高)。\u003c/li\u003e\n\u003cli\u003e不做 JOIN 操作 ( \u003ca href=\"http://www.kuqin.com/system-analysis/20090411/45329.html\"\u003e豆瓣在 QCon\u003c/a\u003e 上也阐述了这一点)。数据是随机分布的,关联操作反而带 …\u003c/li\u003e\u003c/ul\u003e"
June 26, 2010
经典架构模式简介
"\u003cp\u003e根据Linda Rising的《Pattern Almanac》一书,已知的架构模式有七十多种。这是一个只多不少的统计,其中包括了很多通常认为是设计模式的模式,比如 Bridge,Facade,Interpreter,Mediator等模式通常认为是设计模式,但是在许多情况下,也可以作为架构模式出现,因此也常 常被当作架构模式。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eLayers架构模式\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e在收集到用户对软件的要求之后,架构设计就开始了。架构设计一个主要的目的,就是把系统划分成为很多”板块”。划分的方式通常有两种,一种是横向的划分, 一种是纵向划分。\u003c/p\u003e\n\u003cp\u003e横向划分将系统按照商业目的划分。比如一个书店的管理系统可以划分成为进货、销售、库存管理、员工管理等等。\u003c/p\u003e\n\u003cp\u003e纵向划分则不同,它按照抽象层次的高低,将系统划分成”层”,或叫Layer。比如一个公司的内网管理系统通常可以划分成为下面的几个Layer:\u003c/p\u003e\n\u003cp\u003e一、网页,也就是用户界面,负责显示数据、接受用户输入;\u003c/p\u003e\n\u003cp\u003e二、领域层,包括JavaBean或者COM对象、B2B服务等,封装了必要的商业逻辑,负责根据商业逻辑决定显示什么数据、以及如何根据用户输入的数据 进行计算;\u003c/p\u003e\n\u003cp\u003e三、数据库,负责存储数 …\u003c/p\u003e"
June 26, 2010
"\u003cp\u003e切分是最基本,且最多变的思路之一,说基本,是因为在学习程序设计的第一天就应该知道,说多变,是因为在未来的很多年里,你会不停的应用这个方法来 解决问题。不幸的是,切分这个思路并没有得到应有的重视。\u003c/p\u003e\n\u003cp\u003e大概是因为这个词比较土,说起来也比较普通,远不如并行,集群,负载平衡这些词听起来大。所以碰到一个问题的时候,往往被拿出来的解决方案会是以上 3个大词之一,很少有人去认真的考虑切分问题。但事实上,这3个大词所需要的技术,其实也是建立在良好可切分的系统之上的。\u003c/p\u003e\n\u003cp\u003e最近碰到了2个项目,都是典型案例。\u003c/p\u003e\n\u003cp\u003e案例1 ,小公司,发展的不错。一台服务器眼看不够用了,于是就买了第二台,希望能做一个”负载均衡”系统。很多人大概认为负载均衡,是类似自来水一样的技术,只 要打开笼头,清水就汩汩涌出。往往忘记了水龙头后面的水管和自来水公司。\u003c/p\u003e\n\u003cp\u003e一个服务器上放了很多个服务,是很难应用负载均衡这种技术的。必须先要把服务拆开,找到性能薄弱的点,对这个点进行负载均衡,才能得到比较好的效 果。否则很可能用了80%的力气,但是只得到20%的结果。\u003c/p\u003e\n\u003cp\u003e案例2,某外企。之前我们给他们做过咨询,解决了一次问题,上次我们找到了系统最慢的地方,去掉 …\u003c/p\u003e"
June 26, 2010
Web 架构师的能力
"\u003cp\u003e最近和几个朋友在谈到时下流行的Web 2.0,也提到了其中最重要的角色——架构师。多方各有争执,不外乎是因为背景和视角的缘故,包括架构一词,本身就从建筑学借鉴而来,至于架构师,则可以 简单地从建筑学的设计师来引申,不外乎就是设计结构,设计一个大楼的结构。回到软件本身,那就可以简单地理解为负责设计软件框架的人了。\u003c/p\u003e\n\u003cp\u003e我们没有讨论清楚架构师、软件架构师、系统架构师及其Web 架构师这些看似相同却有所区别的角色的关键,本身智者见智,仁者见仁,也不是一时半会能够说清楚的,最后我们讨论作为一个Web 2.0 网站架构师需要的一些基本的知识和能力,既然是个人看法,难免有失偏颇:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e熟知你的业务模式和目标人群\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e这是最重要的,Web 2.0 本质上是以Web 作为平台的业务应用,如果不真正了解你的业务,不了解用户的核心需求,不了解你目标客户的典型行为,是很难做好网站的。从这个角度来讲,一个Web 架构师首先必须是一个出色的产品经理。大多时候,我们只要做到业务技术领先就足够了,一味地追求技术的先进性反倒会深陷泥潭。\u003c/p\u003e\n\u003cp\u003e在技术和业务之间找到一个平衡,也就意味着必须明白整个业务核心的竞争力在哪?目标人群基本诉求在 …\u003c/p\u003e"
June 26, 2010
Twitter,架构的变迁
"\u003cp\u003e\u003ca href=\"http://blog.evanweaver.com/about/\"\u003eEvan Weaver\u003c/a\u003e 是 \u003ca href=\"http://www.kuqin.com/shuoit/Twitter/\"\u003eTwitter\u003c/a\u003e 服务团队的总工程师,他的主要工作是 优化与伸缩性。在 \u003ca href=\"http://qconlondon.com/\"\u003eQCon London 2009\u003c/a\u003e 上,他谈到了Twitter的架构,特别是在过去一年当中为提升Web站点性能所执行的优化。\u003c/p\u003e\n\u003cp\u003eTwitter使用的大部分工具都是开源的。其结构是用Rails作前端,C,Scala和Java组成中间的业务层,使用MySQL存储数据。所 有的东西都保存在RAM里,而数据库只是用作备份。Rails前端处理展现,缓存组织,DB查询以及同步插入。这一前端主要由几部分客户服务粘合而成,大 部分是C写的:MySQL客户端,Memcached客户端,一个JSON端,以及其它。\u003c/p\u003e\n\u003cp\u003e中间件使用了Memcached,Varnish用于页面缓存,一个用Scala写成的MQ,Kestrel和一个Comet服务器也正在规划之 中,该服务器也是用Scala写成,当客户端想要跟踪大量的tweet时它就能派上用场。\u003c/p\u003e\n\u003cp\u003eTwitter是作为一个“内容管理平台而非消息管理平台”开始的,因此从一开始基于聚合读取的模型改变到现在的所有用户都需要更新最新tweet 的消息模型,需要许许多多的优化。这一改动主 …\u003c/p\u003e"
June 26, 2010
校内网CTO:校内网规模架构应用
"\u003cp\u003e从20台服务器到5000台服务器,应该说,校内网的IT基础设施的变迁是与其自身的业务发展成 正比的,而每一次的业务突破实际上也是对数据中心的一个挑战。传统的IT基础建设模式,现在、将来又当如何适应SNS类网站的发展?从Csdn记者此次与 校内网技术总监黄晶的对话中,也许我们可以了解一二。\n\u003cstrong\u003e从20台到5000台服务器\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e作为校内网的CTO,黄晶对过去几年校内网IT基础建设的过程历历在目。\u003c/p\u003e\n\u003cp\u003e“如果要把这个历程分成几个阶段,那么在我看来,校内网的IT基础设施建设目前经历了三个阶段”。\u003c/p\u003e\n\u003cp\u003e黄晶对Csdn记者谈到,第一个阶段是校内网创业的阶段,那时候,校内网的主要推广对象是国内比较好的一些高校,但数量很有限,用户数不太多,访问量也不 大,因此,当时选择了一个IDC并租赁了20台左右的服务器。\u003c/p\u003e\n\u003cp\u003e“随着业务的发展,校内逐渐把业务覆盖到了全国,与此同时,数据量可以呈现几何式的增大,带宽与存储迎来了瓶颈,因此在那时候,公司开始寻找新的IT基础 架构解决方案,并因此而找到了世纪互联做服务器的托管,几年的时间,服务器的数量从几十台上升到了近5000台。”\u003c/p\u003e\n\u003cp\u003e“但问题也随之出现,虽然带宽够大,但是找IDC托管的这种 …\u003c/p\u003e"
June 26, 2010
架构就是关注点分离
"\u003cp\u003e要设计良好的架构,必须做到关注点分离,这样可以产生高内聚、低耦合的系统,这是美丽架构的终极原则。\u003c/p\u003e\n\u003cp\u003e文 / 王海鹏\u003c/p\u003e\n\u003cp\u003e什么是架构? 每个人可能都有自己对架构的定义。我比较喜欢的定义是:“架构是系统的组成部件及其之间的相互关系。”根据观察者的视角不同,架构 又可以分为业务架构和技术架构。一般来说, 功能性需求会对业务架构产生影响, 而非功能性需求会对技术架构产生影响。\u003c/p\u003e\n\u003cp\u003e例如:“注册用户可以向自己的相册上传图片,并与好友分享”。这是一项功能性需求。它告诉了我们在系统的业务架构中,会出现“注册用户”“相册”、 “图片”、“好友”等组成部件,它们之间存在着相互关系。而“系统可以支持10万并发用户,并在需要时可以方便地伸缩,扩展到支持100万到1000万的 并发用户”,则是一项非功能性需求。它告诉了我们系统在性能、负载、吞吐量、可伸缩性方面的特性,目标系统的架构必须对这些特性提供支持。\u003c/p\u003e\n\u003cp\u003e架构体现的是对复杂系统的分解设计。而如何进行分解,则是软件设计领域永恒的话题。实际上,架构体现的是关注点分离的原则和方法。经典的三层架构, 由展现层、业务逻辑层和持久层构成;其中体现了我们对用户界面、业务逻辑和数据持 …\u003c/p\u003e"
June 26, 2010
数据分片(Sharding)设计问题一例
"\u003cp\u003e**Question:**假设一家 C2C 网站,数据库中某表存储买卖双方交易的数据信息,对于一条交易来说,买卖双方数据具有一定程度的耦合性,比如卖家的状态更新对应买家的状态也会更新,对于 一个中大规模的电子商务网站,架构师在设计中如何考虑数据分片的问题(假定该表随着数据的膨胀必须拆分)?\u003c/p\u003e\n\u003cp\u003e**Answer:**对于一个中大规模的电子商务网站,随着网站的不断发展,其相应的数据规模会不断膨胀。 \u003ca href=\"http://www.kuqin.com/database/20080825/15070.html\"\u003e数据分片技术\u003c/a\u003e 是使网站得 于实现可扩展性的一种常用解决方案。对于 C2C 类型的网站,由于交易记录不容易进行水平的数据分割,因此对于这样的应用处理要再进行细分:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e买卖双方交易的信息,具备较高的时效性,即交易全部完成后就不会再有更新,因此这部分数据可以与正在交易中的数据区分开来,并可以单独分 表,定时归纳。具体的做法可以采用水平分割的数据分片技术,比如可以根据用户号码段范围进行切片,把不同的群体划分到不同的 DB 上,这样可以很好的进行横向水平扩展(Scale Out)。它可以很好的突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。\u003c/li\u003e\n\u003cli\u003e对于正在交易中的数据,主要根据时间进行分表。如果 …\u003c/li\u003e\u003c/ul\u003e"
June 26, 2010
转型:产品团队与架构师——金山WPS架构师手记
"\u003cp\u003e与国外大型软件公司相比,在金山,架构师的发展还处于一个学习阶段,我们也正在实践中摸索适合我们的方法。借此机会,我想和大家分享一下WPS项目 中架构师的发展历程和经验教训,共同探讨适合中国软件业的架构师之路。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eWPS项目架构师发展回顾\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eWPS项目架构师的发展是随着V6(内部代号,指WPS Office 2005即后续版本)开始的,在此之前,开发团队并没有明确的架构师角色,开发人员在自发的、简单的模块分工交流之后,即开始各自的编码。从2002年下 半年开始,由包括许式伟在内的一个团队开始V6的前期工作。通过半年的原型开发,确定了模块划分和接口。我觉得,这是我们第一次实施由架构师主导的软件开 发过程。\u003c/p\u003e\n\u003cp\u003e我是在表格组成为架构师的。在此之前,我在表格组作为核心程序员,负责关键模块的开发。大约一年后,随着软件规模不断扩大,项目组成员不断增多,依 靠程序员自发协调的开发模式开始成为项目瓶颈。再加上我自己的兴趣,于是我开始向架构师方向发展。2004 年,系统架构组成立,正式确立了架构师岗位。大致上WPS的架构师与程序员的比例约为1:10,与管理人员相当。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e架构师的定位和职能\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e虽然当前架构师岗位已经非常 …\u003c/p\u003e"
June 26, 2010
软件架构师应该知道的97件事
"\u003cp\u003e软件架构师是个让人羡慕的职业,在市场经济成熟的国家,其薪酬已经达到医生、律师、注册会计师、建筑设计师的水平。但是薪酬高低与职业成熟度没有直 接的关系。重赏之下必有勇夫,高薪往往造成培养机制不健全的行业出现暂时的良莠不齐。目前我们还没有培养软件架构师的成熟机制,架构师大多是程序员自学成 材。程序员擅长和电脑打交道,却不善于处理工作中的人际关系。然而经验表明,除了技术特长,沟通协作的技巧、领导协调的能力、统筹取舍的经验在指挥开发项 目的过程中起着更重要的作用,而这些内容在计算机学院的课本里压根找不到。刚刚升任软件架构师的人,都有一段时间觉得茫然失措,因为有太多非技术问题困扰 着他们。\u003c/p\u003e\n\u003cp\u003e****软件架构师是IT 行业里独一无二的职业,既要精通软件开发技术,又要掌握业务知识,还要周旋于公司不同部门之间,协调各种予盾。做到这些绝非易事, \u003ca href=\"http://blog.csdn.net/bvbook\"\u003e博文视点\u003c/a\u003e 即将翻译出版的新书《软件 架构师应该知道的97 件事》( \u003ca href=\"http://architect.97things.oreilly.com/wiki/index.php/97_Things_Every_Software_Architect_Should_Know_-_The_Book\"\u003e97 Things Every Software Architect Should Know\u003c/a\u003e )探讨的就是这个主题。\u003c/p\u003e\n\u003cp\u003e本书的编辑Richard Monson-Haefel 是畅销书《 …\u003c/p\u003e"
June 26, 2010
如何选择合适的MySQL存储引擎
"\u003cp\u003e本文将讲述MySQL中多种存储引擎的特点,希望可以给你在选择 MySQL存储引擎时带来帮助。\u003c/p\u003e\n\u003cp\u003eMySQL有多种存储引擎:\u003c/p\u003e\n\u003cp\u003eMyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、 ARCHIVE、CSV、BLACKHOLE。\u003c/p\u003e\n\u003cp\u003eMySQL支持数个存储引擎作为对不同表的类型的处理器。MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎:\u003c/p\u003e\n\u003cp\u003e◆ MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。MyISAM在所有MySQL配置里被支持,它是默认的存储引擎,除非你配置 MySQL默认使用另外一个引擎。\u003c/p\u003e\n\u003cp\u003e◆ MEMORY存储引擎提供“内存中”表。MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。就像MyISAM一样,MEMORY 和MERGE存储引擎处理非事务表,这两个引擎也都被默认包含在MySQL中。\u003c/p\u003e\n\u003cp\u003e注释:MEMORY存储引擎正式地被确定为HEAP引擎。\u003c/p\u003e\n\u003cp\u003e◆ InnoDB和BDB存储引擎提供事务安全表。BDB被包含在为支持它的操作系统发布的MySQL-Max二进制分 …\u003c/p\u003e"