Rootcloud和同等产品相比具有哪些两个明显优势势呢?

MongoDB的官方文档基本是how to do的介绍而关於how it worked却少之又少,本人也刚买了《MongoDB TheDefinitive Guide》的影印版还没来得及看,本文原作者将其书中一些关于MongoDB内部现实方面的一些知识介绍如下值得一看。

今天下载了《MongoDB The Definitive Guide》电子版浏览了里面的内容,还是挺丰富的是官网文档实际应用方面的一个补充。和官方文档类似介绍MongoDB的内部原理昰少之又少,只有在附录的一个章节中介绍了相关内容

对于大多数的MongoDB的用户来说,MongoDB就像是一个大黑盒但是如果你能够了解到MongoDB内部一些構造的话,将有利于你更好地理解和使用MongoDB

在MongoDB中,文档是对数据的抽象它被使用在Client端和Server端的交互中。所有的Client端(各种语言的Driver)都会使用這种抽象它的表现形式就是我们常说的BSON(Binary JSON )。

BSON是一个轻量级的二进制数据格式MongoDB能够使用BSON,并将BSON作为数据的存储存放在磁盘中

当Client端要將写入文档,使用查询等等操作时需要将文档编码为BSON格式,然后再发送给Server端同样,Server端的返回结果也是编码为BSON格式再放回给Client端的

使用BSON格式出于以下3种目的:

BSON是为效率而设计的,它只需要使用很少的空间即使在最坏的情况下,BSON格式也比JSON格式再最好的情况下存储效率高

茬某些情况下,BSON会牺牲额外的空间让数据的传输更加方便比如,字符串的传输的前缀会标识字符串的长度而不是在字符串的末尾打上結束的标记。这样的传输形式有利于MongoDB修改传输的数据

最后,BSON格式的编码和解码都是非常快速的它使用了C风格的数据表现形式,这样在各种语言中都可以高效地使用

更多关于BSON的介绍,可以参考:

Client端访问Server端使用了轻量级的TCP/IP写入协议。这种协议在中有详细介绍它其实是茬BSON数据上面做了一层简单的包装。比如说写入数据的命令中包含了1个20字节的消息头(由消息的长度和写入命令标识组成),需要写入的Collection洺称和需要写入的数据

在MongoDB的数据文件夹中(默认路径是/data/db)由构成数据库的所有文件。每一个数据库都包含一个.ns文件和一些数据文件其Φ数据文件会随着数据量的增加而变多。所以如果有一个数据库名字叫做foo那么构成foo这个数据库的文件就会由等平台的驱动程序。(

SQL or NoSQLThat’s a question!SQL 与 NoSQL 嘚争论从来没有停息过,但其实任何一种技术都不会是适合一切应用场景的重要的是你要充分了解自己的需求,再充分了解你要选择的技术的优劣

下面是一个关于 MongoDB 优缺点的列表,希望对打算使用 MongoDB 的同学能有一些作用:

快速!(当然,这和具体的应用方式有关通常来說,它比一般的关系型数据库快5位左右)

很高的可扩展性 – 轻轻松松就可实现PB级的存储(但是可能我们并不需要PB级的存储,10TB可能就够了)

他的存储格式是Json的这对Java来说非常好处理,对javascirpt亦然

运维起来非常方便,你不用专门为它安排一个管理员

它有一个非常活跃的社区(峩提出的一个bug在20分钟内就能得到修复。多谢Elliot)

他的版本控制非常清楚

MongoDB 背后的公司(10gen)已经准备好了明天在 MongoDB 上面的投入的资金了。

应用经驗缺乏我们都没有相关NoSQL 产品的使用经验。

项目相对来说还比较新

和以往的存储相比,数据的关系性操作不再存在

本文详细讲下Memcached和Mongodb一些看法,以及结合应用有什么好处希望看到大家的意见和补充。

  Memcached的优势我觉得总结下来主要体现在:

  1) 分布式可以由10台拥有4G內存的机器,构成一个40G的内存池如果觉得还不够大可以增加机器,这样一个大的内存池完全可以把大部分热点业务数据保存进去,由內存来阻挡大部分对数据库读的请求对数据库释放可观的压力。

  2) 单点如果Web服务器或App服务器做负载均衡的话,在各自内存中保存嘚缓存可能各不相同如果数据需要同步的话,比较麻烦(各自自己过期还是分发数据同步?)即使数据并不需要同步,用户也可能洇为数据的不一致而产生用户体验上的不友好

  3) 性能强。不用怀疑和数据库相比确实是根源上还是内存的读写和磁盘读写效率上幾个数量级的差距。有的时候我们在抱怨数据库读写太差的情况下可以看看磁盘的IO如果确实是瓶颈的话装啥强劲的数据库估计也档不了,强不强无非是这个数据库多少充分的利用了内存

  但是也不太建议在任何情况下使用Memcached替代任何缓存:

  1) 如果Value特别大,不太适合因为在默认编译下Memcached只支持1M的Value(Key的限制到不是最大的问题)。其实从实践的角度来说也 不建议把非常大的数据保存在Memcached中因为有序列化反序列化的过程,别小看它消耗的CPU说到这个就要提一下,我一直觉得 Memcached适合面向输出的内容缓存而不是面向处理的数据缓存,也就是不太適合把大块数据放进去拿出来处理之后再放进去而是适合拿出来就直接给输出了,或是拿出来不需要处理直接用

  2) 如果不允许过期,不太适合Memcached在默认情况下最大30天过期,而且在内存达到使用限制后它也会回收最少使用的数据因此,如果我们要把它当 作static变量的话僦要考虑到这个问题必须有重新初始化数据的过程。其实应该这么想既然是缓存就是拿到了存起来,如果没有必定有一个重新获取重噺缓存的过程而不是想着它永远存在。

  在使用Memcached的过程中当然也会有一些问题或者说最佳实践:

  1) 清除部分数据的问题Memcached只是一個Key/Value的池,一个公共汽车谁都可以上我觉得对于类似的公共资源,如果用的人都按照自己的规 则来的话很容易出现问题因此,最好在Key值嘚规范上上使用类似命名空间的概念 每一个用户都能很明确的知道某一块功能的Key的范围,或者说前缀带来的好处是我们如果需要清空嘚话可以根据这个规范找到我们自己的一批Key然后再去 清空,而不是清空所有的当然有人是采用版本升级的概念,老的Key就让它过去吧到時候自然会清空,这也是一种办法不过Key有规范总是有好处的,在 统计上也方便一点

  2) Value的组织问题。也就是说我们存的数据的粒度比如要保存一个列表,是一个保存在一个键值还是统一保存为一个键值这取决于业务。如果粒度很小的话最好是在获取的时候能批量獲取在保存的时候也能批量保存。对于跨网络的调用次数越少越好可以想一下,如果一个页面需要输出100行数据每一个数据都需要获取一次,一个页面进行上百次连接这个性能会不会成问题

  那么Memcached主要用在哪些功能上呢?

  其实我觉得平时能想到在内存中做缓存嘚地方我们都可以考虑下是不是可以去适用分布式缓存但是主要的用途还是用来在前端或中部挡一下读的需求来释放Web服务器App服务器以及DB嘚压力。

  Mongodb是一款比较优良的非关系型数据库的文档型的数据库它的优势主要体现在:

  1) 开源。意味着即使我们不去改也可以充汾挖掘它MS SQL除了看那些文档,谁又知道它内部如何实现

  2) 免费。意味着我们可以在大量垃圾服务器上装大量的实例即使它性能不怎么高,也架不住非常多的点啊

  3) 性能高。其它没比较过和MS SQL相比,同样的应用(主要是写操作)一个撑500用户就挂了一个可以撑箌2000。在数据量上到百万之后即使没索引,MS SQL的插入性能下降的也一塌糊涂其实任何事物都有相对性的,在变得复杂变得完善了之后会牺牲一部分的性能MS SQL体现的是非常强的安全性数据完整性,这点是Mongodb办不到的

  4) 配置简单并且灵活。在生产环境中对数据库配置故障转迻群集和读写分离的数据库复制是很常见的需求MS SQL的配置繁琐的步骤还是很恐怖的,而Mongodb可以在五分钟之内配置自己所需要的故障转移组讀写分离更是只需要一分钟。灵活性体现在我们可以配置一个M一个S,两个M一个S(两个M写入的数据会合并到S上供读取)一个M两个S(一个M寫入的数据在两个S上有镜像),甚至是多个M多个S(理论上可以创建10个M10个S,我们只需要通过轮询方式随便往哪个M上写需要读的时候也可鉯轮训任意一个S,当然我们要知道不可能保证在同一时间所有的 S都有一致的数据)那么也可以配置两个M的对作为一套故障转移群集,然後这样的群集配置两套再对应两个S,也就是4个M对应2个S保证M点具有故障 转移。

  5) 使用灵活在之前的文章中我提到甚至可以通过SQL到JS表达式的转换让Mongodb支持SQL语句的查询,不管怎么说Mongodb在查询上还是很方便的

  之前也说过了,并不是所有数据库应用都使用采用Mongodb来替代的咜的主要缺点是:

  1) 开源软件的特点:更新快,应用工具不完善由于更新快,我们的客户端需要随着它的更新来升级才能享受到一些新功能更新快也意味着很可能在某一阶段会缺乏某个重要功能。另外我们知道MS SQL在DEV/DBA/ADM多个维度都提供了非常好的GUI工具对数据库进行维护洏Mongodb虽然提供了一些程序,但是并不是非常友好我们的 DBA可能会很郁闷,去优化Mongodb的查询

  2) 操作事务。Mongodb不支持内建的事务(没有内建事務不意味着完全不能有事务的功能)对于某些应用也就不适合。不过对于大部分的互联网应用来说并不存在这个问题

  在使用Mongodb的过程中主要遇到下面的问题:

  1) 真正的横向扩展?在使用Memcached的过程中我们已经体会到这种爽了基本可以无限的增加机器来横向扩展,因為什么因为我们是通过客户端来决定键值保存在那个实例上,在获取的时候也很明确它在哪个实例上即使是一次性获取多个键值,也昰同样而对于数据库来说,我们通过各种各样的方式进行了 Sharding不说其它的,在查询的时候我们根据一定的条件获取批量的数据怎么样詓处理?比如我们按照用户ID去分片而查询根本不在乎用户ID, 在乎的是用户的年龄和教育程度最后按照姓名排序,到哪里去取这些数据不管是基于客户端还是基于服务端的Sharding都是非常难做的,并且即使有了 自动化的Sharding性能不一定能有保障最简单的是尽量按照功能来分,再丅去就是历史数据的概念真正要做到实时数据分散在各个节点,还是很困难

  2) 多线程,多进程在写入速度达不到预期的情况下峩们多开几个线程同时写,或者多开几个Mongodb进程(同一机器)也就是多个数据库实例,然后向不同 的实例去写这样是否能提高性能?很遺憾非常有限,甚至可以说根本不能提高为什么使用Memcached的时候多开线程可以提高写入速度?那是因为内 存数据交换的瓶颈我们没达到洏对于磁盘来说,IO的瓶颈每秒那么几十兆的是很容易达到的一旦达到这个瓶颈了,无论是开多少个进程都无法提高性能了还 好Mongodb使用内存映射,看到内存使用的多了其实我对它的信心又多了一点(内存占用多了我觉得CPU更容易让它不闲着),怕就怕某个DB不使用什 么内存看着IO瓶颈到了,内存和CPU还是吃不饱

  其实有了Memcached和Mongodb我们甚至可以让80%以上的应用摆脱传统关系型数据库。我能想到它们其实可以互相配合彌补对方的不足:

  Memcached适合根据Key保存Value那么有的时候我们并不知道需要读取哪些Key怎么办呢?我在想是不是可以把Mongodb或 说数据库当作一个原始數据这份原始数据中分为需要查询的字段(索引字段)和普通的数据字段两部分,把大量的非查询字段保存在Memcached中小粒 度保存,在查询嘚时候我们查询数据库知道要获取哪些数据一般查询页面也就显示20-100条吧,然后一次性从Memcached中获取这些数据也就是 说,Mongodb的读的压力主要是索引字段而数据字段只是在缓存失效的时候才有用,使用Memcached挡住大部分实质数据的查询反过来说,如果我们要清空Memcached中的数据也知道要清涳哪些Key

NoSQL 数据库在上年炒得很热,于是我也萌生了使用 NoSQL 数据库写一个应用的想法首先来认识一下 NoSQL。NoSQL 是一个缩写含义从最初的 No-SQL 到现在已經成为了 Not-Only-SQL。确实后面一种解释比较符合 NoSQL 的使用场景

现在网络上被人所知的 NoSQL 数据库可以在这个网页()看到。这个列表林林总总一大堆偠选择哪个数据库入手呢?

在我关注的 Web 领域特别是 Ruby on Rails 社区,比较多提到的是这几个数据库:

另一个apache基金会下的非关系数据库。

特点是運行在内存中,速度很快相比于用来持久化数据,也许更接近于 memcached 这样的缓存系统或者用来实现任务队列。(比如)

在这些候选名单中峩选择了MongoDB因为它最近在 RoR 社区中的露脸率比较高,网页文档完善并且项目主页的设计也不错

在陈述 MongoDB 的特性之前,还是给第一次接触 NoSQL 的人提个醒:不要意图用 NoSQL 全盘取代 SQL 数据库非关系数据库的出现不是为了取代关系数据库。具体的说MongoDB 并不支持复杂的事务,只支持少量的原孓操作所以不适用于“转帐”等对事务和一致性要求很高的场合。而 MongoDB 适合什么场合请继续阅读。

关系数据库比如 MySQL通常将不同的数据劃分为一个个“表”,表的数据是按照“行”来储存的而关系数据库的“关系”是指通过“外键”将表间或者表内的数据关联起来。比洳文章-评论 的一对多关系可以用这样的表来实现:

实现关联的关键就是 comments 表的最后一个 post_id 字段将 comment 数据的 post_id 字段设为评论目标文章的 id 值,就可以鼡 SQL 语句进行相关查询(假设要查的文章 id 是 1):
相对于关系数据库的行式储存和查询MongoDB 作为一个文档型数据库,可以支持更具层次感的数据上面举的 文章-评论 结构,在 MongoDB 里面可以这样设计

可以看到,文档性数据库从储存的数据项上就跟 SQL 数据库不同在 MongoDB 中,文档是以  格式(类姒 JSON)储存的可以支持丰富的层次的结构。由于数据结构的表达能力更强用 MongoDB 储存文档型数据可以比 SQL 数据库更直观和高效。

在 SQL 数据库中為表达数据的从属关系,通常要将表间关系分为 one-to-oneone-to-many,many-to-many 等模式进行设计这通常会需要很多链接表的辅助。在MongoDB 中如果关联文档体积较小,凅定不变并且与另一文档是主从关系,那么通常可以嵌入(Embed)主文档

常见情景:评论、投票点击数据、Tag。

这类场景的有时单个数据项體积很小但是数量巨大,与之相应的是查询成本也会上升如果将这些小数据嵌入所属文档,在查询主文档时一并提取查询效率要比 SQL 高,后者通常需要开支较大的 JOIN 查询并且根据文档介绍,每个文档包括 Embed 部分在物理硬盘上都是储存在同一区域的IO 部分也会比 SQL 数据库快。(注MongoDB 有单文档大小限制)

MongoDB 中的文档其实是没有模式的,不像 SQL 数据库那样在使用前强制定义一个表的每个字段这样可以避免对空字段的無谓开销。

例如两个用户的联系信息A 用户带有email 不带 url,B 用户带有 url 不带 email在 SQL 数据库中需要为两个数据项都提供 email 段和 url 段,而在MongoDB 中可以这样保存:

在关系数据库中如果这些不确定的字段很多而且数量很大,为了优化考虑可能又要划分成两个表了比如users 和 profiles 两个表。在 MongoDB 中如果这一類不确定信息确实是属于同一文档的,那么可以轻松的放在一起因为并不需要预先定义模式,也不会有空字段的开销

不过因为要支持這样的动态性,并且为了性能考虑进行预先分配硬盘空间数据外的开销也会带来磁盘占用。我还未实测实际中开销有多大也许未来不玖我会写一个应用测试。

Framework 并在 2002 年首次发行以来的过去近十年中.NET开发人员一直努力适应 Microsoft 推出的各种新事物。但这似乎还不够“社区”(包含所有开发人员,无论他们是否每天都使用.NET)也开始行动创造出更多的新事物来填补Microsoft 未覆盖到的空白,对您而言这可能是制造混乱和幹扰

在 Microsoft 的支持 范围之外,该社区所酝酿出的“新”事物之一就是 NoSQL 运动一组开发人员公开质疑将所有数据存储于某种形式的关系数据库系统的这种观念。表、行、列、主键、外键约束、关于null 的争论以及有关主键是否应该为自然键或非自然键的辩论……还有什么是神圣不可侵犯的

在本文及其后续文章中,我将探讨NoSQL 运动所倡导的主要工具之一:MongoDB根据 MongoDB 网站的陈述,该工具的名称源自于“humongous”(并不是我杜撰的)我基本上会讨论到与 MongoDB 相关的方方面面:安装、浏览以及在.NET Framework 中使用 MongoDB。其中包括其提供的 LINQ 支持;在其他环境(桌面应用程序和Web 应用程序及垺务)中使用MongoDB;以及如何设置MongoDB以免 Windows 生产管理员向您提出严重抗议。

问题(或者为何我要再次关注?)

在深入了解MongoDB 之前读者自然要问為什么.NET Framework 开发人员应该牺牲接下来宝贵的大约半小时时间继续待在电脑前阅读本文。毕竟SQLServer 有免费、可再发行的Express Edition,提供比企业或数据中心绑萣的传统关系数据库更精简的数据存储方案而且毫无疑问,还可以使用大量工具和库来轻松访问SQL Server 数据库其中包括Microsoft 自己的 LINQ 和实体框架。

泹问题在于关系模型(指关系模型本身)的优点也是其最大的缺点。大多数开发人员(无论是.NET、Java 还是其他开发人员都在此列)在经历短短几年的开发工作之后就会一一痛诉这种表/行/列的“方正”模型如何不能令其满意。尝试对分层数据进行建模的举动甚至能让最有经验嘚开发人员完全精神崩溃类似情况不甚枚举,因此Joe Celko 还写过一本书《SQLfor Smarties, Third Edition》(Morgan-Kaufmann2005),其中完全是关于在关系模型中对分层数据建模的概念如果在此基础之上再增加一个基本前提:关系数据库认为数据的结构(数据库架构)不灵活,则尝试支持数据的临时“添加”功能将变得十汾困难(快速回答下面的问题:你们之中有多少人处理过包含一个Notes 列(乃至 Note1、Note2、Note3……)的数据库?)

NoSQL 运动中没有任何人会说关系模型没囿优点也没有人会说关系数据库将会消失,但过去二十年开发人员生涯的一个最基本的事实是开发人员经常将数据存储到本质上并非關系模型(有时甚至与这种模型相去甚远)的关系数据库中。

面向文档的数据库便是用于存储“文档”(这是一些紧密结合的数据集合通常并未关联到系统中的其他数据元素),而非“关系”例如,博客系统中的博客条目彼此毫无关联即使出现某一篇博客确实引用到叧一篇博客的情况,最常用的关联方法也是通过超链接(旨在由用户浏览器解除引用)而非内部关联。对本博客条目的评论完全局限于夲博客条目的内部范围不管评论的是什么博客条目,极少有用户想查看包含所有评论的内容集合

此外,面向文档的数据库往往在高性能或高并发性环境中表现突出:MongoDB专门迎合高性能需求而它的近亲CouchDB 则更多的是针对高并发性的情况。两者都放弃了对多对象事务的支持吔就是说,尽管它们支持在数据库中对单个对象进行的并发修改但若尝试一次性对多个对象进行修改,将会在一小段时间内看到这些修妀正依序进行文档以“原子方式”更新,但不存在涉及多文档更新的事务概念这并不意味着MongoDB 没有任何稳定性,只是说MongoDB 实例与 SQL Server 实例一样鈈能经受电源故障需要原子性、一致性、隔离性和持久性(ACID) 完整要素的系统更适合采用传统的关系数据库系统,因此关键任务数据很可能鈈会太快出现在MongoDB 实例内但Web 服务器上的复制数据或缓存数据可能要除外。

一般来说若应用程序及组件需要存储可快速访问且常用的数据,则采用MongoDB 可以取得较好效果网站分析、用户首选项和设置(以及包含非完全结构化数据或需采用结构灵活的数据的任何系统类型)都是采用MongoDB 的自然之选。这并不意味着MongoDB 不能作为操作型数据的主要数据存储库;只是说MongoDB 能在传统 RDBMS 所不擅长的领域内如鱼得水另外它也能在大量其他适合的领域内大展拳脚。

前面提到过MongoDB是一款开源软件包,可通过 MongoDB 网站  轻松下载在浏览器中打开该网站应该就能找到Windows 可下载二进制包的链接,请在页面右侧查找“Downloads”链接另外,如果更愿意使用直接链接请访问 。截至本文撰写之时其稳定版本为发行版 Framework 驱动程序,此类驱动程序知道如何通过打开的套接字进行连接以向服务器输送命令和数据MongoDB 程序包中并未绑定 .NET Framework 驱动程序,但有幸的是社区提供了一個,此处的“社区”指的是名叫 Sam Corder 的开发人员他构建了一个 .NET Framework 驱动程序以及 LINQ 支持来访问 MongoDB。他的作品同时以源代码形式和二进制形式提供位於。可以从该页面下载二进制文件(查找页面右上角)也可以下载源代码,然后自行编译无论采取哪种方式,都会产生两个程序集: Framework 叻

从根本上来说,打开与正在运行的MongoDB 服务器的连接同打开与任何其他数据库的连接没有太大差别,如图 4 所示

using Framework 开发人员使用过的方法囿所不同而已(请参阅图 5)。
 
 
using Framework 值类型如DateTime。如前所述从技术角度上讲,MongoDB用于存储 BSON 数据其中包括传统 JSON 类型(字符串、整数、布尔值、双精度和null,不过 null
 仅允许用于对象不允许用于集合)的某些扩展,例如上文提到的ObjectId、二进制数据、正则表达式以及嵌入式JavaScript 代码我们暂时先鈈管后面两种类型,BSON能存储二进制数据的这种说法是指能存储任何可简化为字节数组的内容这实际上表示MongoDB 能存储任何内容,但可能无法茬该二进制BLOB 中进行查询
 
 


Ted Neward 是 Neward & Associates 的负责人,这是一家专门研究 .NET Framework 企业系统和 Java 平台系统的独立公司他曾写作 100 多篇文章,是 C# 领域最优秀的专家之一並且是 INETA 发言人著作或合著过十几本书,包括即将出版的《Professional F# 与他联系或通过 访问其博客。
在主要介绍了 MongoDB 的基本知识:安装、运行,以忣插入和查找数据不过,这篇文章只介绍了基本知识所用的数据对象是简单的名称/值对。这是有道理的因为 MongoDB 的最大优势就包括可使鼡相对简单的非结构化数据结构。可以肯定地说这种数据库能存储的不只是简单的名称/值对。
在本文中我们将通过一种略微不同的方法来研究MongoDB(或任何技术)。这个称为探索测试的过程可帮助我们发现服务器中可能存在的错误同时可以凸显面向对象开发人员在使用MongoDB 时會遇到的常见问题之一。
 
首先我们要确保讨论同样的问题,还要涉及一些略微不同的新领域让我们以一种与前一文章()相比更加结构化嘚方式来探讨MongoDB。我们不只是创建简单的应用程序然后进行调试,我们将采取一举两得的做法创建探索测试。探索测试的代码段看起来潒单元测试但它们探索功能而不是尝试验证功能。
在研究一项新技术时编写探索测试可实现几种不同的目的。其一它们有助于发现所研究的技术在本质上是不是可以测试的(假设如下:如果难于进行探索测试,则难于进行单元测试而这是一个很严重的问题)。其二在所研究的技术出现新的版本时,它们可作为一种回归测试因为它们可在旧功能不再正常工作的情况下发出警告。其三测试应是相對小型精细的,因此在本质上,探索测试通过基于以前用例创建新“what-if”用例使得新技术的学习更为容易。
不过与单元测试不同,探索测试不是随应用程序连续开发的因此,一旦考虑所学习的技术请将这些测试放在一旁。但不要将它们丢弃它们还可帮助分离应用程序代码中的错误与库或框架中的错误。这些测试通过提供一种与应用程序无关的轻型环境来进行实验从而完成这种分离,不会产生应鼡程序开销
明确了这一点后,我们来创建Visual C# 测试项目MongoDB-Explore将驱动程序提供了 DBRef,后者可通过略微更丰富的方式来引用/解除引用其他文档但仍無法实现对象图友好的系统。)因此尽管肯定可以获得一个丰富的对象模型并将其存储到MongoDB 数据库中,仍不建议这样做请坚持使用Word 或 Excel 这樣的文档来存储紧密群集的数据组。如果某些内容可视为大型文档或电子表格则可能非常适合MongoDB 或其他某种面向文档的数据库。
上一次峩使用探索测试继续对MongoDB 进行探讨。我介绍了如何在测试期间启动和停止服务器然后介绍了如何获取跨文档引用,并探讨了导致如此麻烦舉动的原因现在我们需要探索更多中间的 MongoDB 功能:谓词查询、聚合函数以及 Framework 企业系统和 Java 平台系统的独立公司。他曾写作 100 多篇文章是 C# 领域朂优秀的专家之一并且是 INETA 发言人,著作或合著过十几本书包括即将出版的《Professional F# 与他联系,或通过 访问其博客
Dwight Merriman和他的团队,包括ShopWiki的创始人Eliot Horowitz參加了在纽约10gen启动MongoDB的仪式现在该公司除了担任该开源项目的主要运营者之外,还提供支持、培训和咨询服务10gen在旧金山举办了第二届开發者大会,Merriman在上午的大会做了主题演讲主要介绍了MongoDB的起源,并解释了为何要建立这样的数据库
“在2007年底,当时的想法是构建一个用于開发、托管并具有自动缩放Web应用程序的在线服务”谈到MongoDB诞生之目的时,Merriman介绍道“但是不同于Google App Engine的是,这项服务完全建立在一个开放源代碼的软件平台之上”因此,在关注了Google Bigtable架构很长一段时间后Merriman和他的团队注意到,尚没有一个开源的数据库平台适合这种服务这兴许是個机会。
“我们意识到很多现有的数据库并不真正具备‘云计算’的特性例如弹性、可扩展性以及易管理性。这些特性能够为开发者和運营者带来便利而MySQL还不完全具备这些特点。
Merriman以及他的团队的目标是构建一个全新的数据库新的数据库将会放弃大家所熟悉的关系数据庫模型,且是适合现代网络应用并基于分布式的平台高度事务性的系统可以帮助解决一些棘手的问题,同时还支持云计算架构的伸缩性Merriman解释到。经过一年的不断努力这个数据库已经比较完善。他们将它设计为具有为“云计算服务”潜力的数据库而且还会不断的完善,因为MongoDB本身就是一个开源数据库
在开源的、面向文档的数据库中,MongoDB经常被誉为具有RDBMS功能的NoSQL数据库MongoDB还带有交互式shell,这使得访问其数据存儲变得简单且其对于分块的即装即用的支持能够使高可伸缩性跨多个节点。
据悉MongoDB的API是JSON对象和JavaScript函数的本地混合物。通过shell程序开发人员可與MongoDB进行交互即允许命令行参数,或通过使用语言驱动程序来访问数据存储实例这里不存在类JDBC驱动程序,这意味着开发人员不必处理ResultSet或PreparedStatement
而速度是 MongoDB 的另外一个优势,主要是由于它处理写入的方式:它们存储在内存中然后通过后台线程写入磁盘。
“由于用户不容易在大规模环境下作分布式的链接并且在分布式环境下很难做快速的大规模部署,因此用户需要一些辅助的东西”,Memmiman解释道
最后他表示同样偅要的是为了限制数据库的事务语义你可以使用分布式事务。但当你在1000台机器上运行时它不会那么快例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序(李智/译)
本文见于MongoDB官方网站,MongoDB与CouchDB很相似他们都是文档型存储,数据存储格式都是JSON型的都使用Javascript进行操作,都支持Map/Reduce但是其实二者有着很多本质的区别,本文透过现象追寻本质让你更好的理解MongoDB与CouchDB。

这是gridfs的nginx )昰国内最大的创意人群的专业网站2009年以前,同很多公司一样我们的CMS和社区产品都构建于PHP+Nginx+MySQL之上;MySQL使用了Master+Master的部署方案;前端使用自己的PHP框架进行开发;Memcached作为缓存;Nginx进行Web服务和负载均衡;Gearman进行异步任务处理。在传统的基于静态内容(如文章资讯,帖子)的产品这个体系运荇良好。通过分级的缓存数据库端实际负载很轻。2009年初我们进行了新产品的开发。此时我们遇到了如下一些问题。
  用户数据激增:我们的MySQL某个信息表上线1个月的数据就达到千万我们之前忽略的很多数据,在新形势下需要跟踪记录这也导致了数据量的激增;
  用户对于信息的实时性要求更高:对信息的响应速度和更新频度就要求更高。简单通过缓存解决的灵丹妙药不复存在;
  对于Scale-out的要求哽高:有些创新产品的增长速度是惊人的因此要求能够无痛的升级扩展,否则一旦停机那么用户流失的速度也是惊人的;
  大量文件的备份工作:我们面向的是创意人群,产生的内容是以图片为主需要能够对这些图片及不同尺寸的缩略图进行有效的备份管理。我们の前使用的Linux inotify+rsync的增量备份方案效果不佳;
  需求变化频繁:开发要更加敏捷开发成本和维护成本要更低,要能够快速地更新进化新功能要在最短的周期内上线。
  最初我们试图完全通过优化现有的技术架构来解决以上问题:对数据时效性进一步分级分层缓存,减小緩存粒度;改进缓存更新机制(线上实时和线下异步更新)提高缓存命中率;尝试对业务数据的特点按照水平和垂直进行分表;使用MogileFS进行汾布存储;进一步优化MySQL的性能同时增加MySQL节点等。但很快发现即便实施了上述方案,也很难完全解决存在的问题:过度依赖Memcached导致数据表媔一致性的维护过于复杂应用程序开发需要很小心,很多时候出现Memcached的失效会瞬间导致后端数据库压力过大;不同类型数据的特点不同數据量差别也很大;分表的机制和方式在效率平衡上很难取舍;MogileFS对我们而言是脚小鞋大,维护成本远远超过了实际的效益;引入更多的MySQL数據库节点增大了我们的维护量如何有效监控和管理这些节点又成了新的问题。虽然虚拟化可以解决部分问题但还是不能令人满意;
  除了MySQL,能否找到一个更为简单、轻便的瑞士军刀呢我们的目光投向了NoSQL的方案。

  最初对于NoSQL的候选方案,我依据关注和熟悉程度並且在甄别和选择合适的方案时特别制定了一些原则:是否节省系统资源,对于CPU等资源是否消耗过大;客户端/API支持这直接影响应用开发嘚效率;文档是否齐全,社区是否活跃;部署是否简单;未来扩展能力按以上几点经过一段测试后,我们候选名单中剩下Redis、MongoDB和Flare
  Redis对豐富数据类型的操作很吸引人,可以轻松解决一些应用场景其读写性能也相当高,唯一缺点就是存储能力和内存挂钩这样如果存储大量的数据需要消耗太多的内存(最新的版本已经不存在这个问题)。
  Flare的集群管理能力令人印象深刻它可以支持节点的动态部署,支歭节点的基于权重的负载均衡支持数据分区。同时允许存储大的数据其key的长度也不受Memcached的限制。而这些对于客户端是透明的客户端使鼡Memcached协议链接到Flare的proxy节点就可以了。由于使用集群Flare支持fail-over,当某个数据节点宕掉对于这个节点的访问都会自动被proxy节点forward到对应的后备节点,恢复后还可以自动同步Flare的缺点是实际应用案例较少,文档较为简单目前只在Geek使用。
  以上方案都打算作为一个优化方案我从未想過完全放弃MySQL。然而用MongoDB做产品的设计原型后,我彻底被征服了决定全面从MySQL迁移到MongoDB。

  MongoDB是一个面向文档的数据库目前由10gen开发并维护,咜的功能丰富齐全,完全可以替代MySQL在使用MongoDB做产品原型的过程中,我们总结了MonogDB的一些亮点:
  使用JSON风格语法易于掌握和理解:MongoDB使用JSON嘚变种BSON作为内部存储的格式和语法。针对MongoDB的操作都使用JSON风格语法客户端提交或接收的数据都使用JSON形式来展现。相对于SQL来说更加直观,嫆易理解和掌握

  Collection中可以包含具有不同schema的文档记录。 这意味着你上一条记录中的文档有3个属性,而下一条记录的文档可以有10个属性属性的类型既可以是基本的数据类型(如数字、字符串、日期等),也可以是数组或者散列甚至还可以是一个子文档(embed document)。这样可鉯实现逆规范化(denormalizing)的数据模型,提高查询的速度

  图2是一个例子,作品和评论可以设计为一个collection评论作为子文档内嵌在art的comments属性中,評论的回复则作为comment子文档的子文档内嵌于replies属性按照这种设计模式,只需要按照作品id检索一次即可获得所有相关的信息了。在MongoDB中不强調一定对数据进行Normalize ,很多场合都建议De-normalize开发人员可以扔掉传统关系数据库各种范式的限制,不需要把所有的实体都映射为一个Collection只需定义朂顶级的class。MongoDB的文档模型可以让我们很轻松就能将自己的Object映射到collection中实现存储

  简单易用的查询方式:MongoDB中的查询让人很舒适,没有SQL难记的語法直接使用JSON,相当的直观对不同的开发语言,你可以使用它最基本的数组或散列格式进行查询配合附加的operator,MongoDB支持范围查询正则表达式查询,对子文档内属性的查询可以取代原来大多数任务的SQL查询。
  CRUD更加简单支持in-place update:只要定义一个数组,然后传递给MongoDB的insert/update方法就鈳自动插入或更新;对于更新模式MongoDB支持一个upsert选项,即:“如果记录存在那么更新否则插入”。MongoDB的update方法还支持Modifier通过Modifier可实现在服务端即時更新,省去客户端和服务端的通讯这些modifer可以让MongoDB具有和Redis、Memcached等KV类似的功能:较之MySQL,MonoDB更加简单快速Modifier也是MongoDB可以作为对用户行为跟踪的容器。茬实际中使用Modifier来将用户的交互行为快速保存到MongoDB中以便后期进行统计分析和个性化定制
  所有的属性类型都支持索引,甚至数组:这可鉯让某些任务实现起来非常的轻松在MongoDB中,“_id”属性是主键默认MongoDB会对_id创建一个唯一索引。
  服务端脚本和Map/Reduce:MongoDB允许在服务端执行脚本鈳以用Javascript编写某个函数,直接在服务端执行也可以把函数的定义存储在服务端,下次直接调用即可MongoDB不支持事务级别的锁定,对于某些需偠自定义的“原子性”操作可以使用Server side脚本来实现,此时整个MongoDB处于锁定状态Map/Reduce也是MongoDB中比较吸引人的特性。Map/Reduce可以对大数据量的表进行统计、汾类、合并的工作完成原先SQL的GroupBy等聚合函数的功能。并且Mapper和Reducer的定义都是用Javascript来定义服务端脚本
  性能高效,速度快: MongoDB使用c++/boost编写在多数場合,其查询速度对比MySQL要快的多对于CPU占用非常小。部署也很简单对大多数系统,只需下载后二进制包解压就可以直接运行几乎是零配置。
  支持多种复制模式: MongoDB支持不同的服务器间进行复制包括双机互备的容错方案。
  Master-Slave是最常见的通过Master-Slave可以实现数据的备份。茬我们的实践中我们使用的是Master-Slave模式,Slave只用于后备实际的读写都是从Master节点执行。

  MongoDB只能支持有限的双主模式(Master-Master)实际可用性不强,鈳忽略
  内置GridFS,支持大容量的存储:这个特点是最吸引我眼球的也是让我放弃其他NoSQL的一个原因。GridFS具体实现其实很简单本质仍然是將文件分块后存储到/
Wordnik是一项在线字典及百科全书服务,在大约一年前它们逐渐开始从MySQL迁移至文档型数据库MongoDB,后者是著名的NoSQL产品之一最菦Wordnik的技术团队通过官方博客。
  据Wordnik技术团队描述它们,是看中了它的弱一致性(最终一致)及文档结构的存储方式
  在传统的关系型数据库中,一个COUNT类型的操作会锁定数据集这样可以保证得到“当前”情况下的精确值。这在某些情况下例如通过ATM查看账户信息的時候很重要,但对于Wordnik来说数据是不断更新和增长的,这种“精确”的保证几乎没有任何意义反而会产生很大的延迟。他们需要的是一個“大约”的数字已经更快的处理速度
  此外,Worknik的数据结构是“层级”式的如果要将这样的数据使用扁平式的,表状的结构来保存數据这无论是在查询还是获取数据时都十分困难:
就拿一个“字典项”来说,虽然并不十分复杂但还是会关系到“定义”、“词性”、“发音”或是“引用”等内容。大部分工程师会将这种模型使用关系型数据库中的主键和外键表现出来但把它看作一个“文档”而不昰“一系列有关系的表”岂不更好?使用“mit();//提交事务 }else{ mit();//提交事务 }else{

为数据访问创建一个单独的抽象层对于“非关系型数据库”来说是必须的咜可以带来多方面的好处。首先应用开发者可以与底层解决方案的细节完全隔离开来。这对于技术方面的伸缩性带来了好处同时未来洳果需要更改底层的解决方案也很方便。这也以一个标准的方式满足了多个应用的要求(即去掉了JoinGroup by等复杂特性的SQL)。

为性能和伸缩性创建模型

不管选择怎样的解决方案使用标准技术(比如,等)来对性能和伸缩性进行建模都是高度推荐的它能够为基本的服务器规划、拓扑以及整体的软件许可证成本,管理运行等提供必要的数据这将实质上成为所有预算计划的主要参考数据,并对作出决策提供帮助

要防止数據丢失,除了将数据复制到备份服务器上没有其它的办法了。尽管许多非关系型数据库提供自动复制功能但仍然存在主节点单点失效嘚风险。因此最好是使用次节点备份并准备好用于数据恢复和自动数据修复的脚本。出于这样的目的应当充分的了解目标解决方案的粅理数据模型,找出可能的恢复机制备选方案基于企业的整体需求和实践来对这些选项作出评估。

就像公共共享服务的关系型数据库一樣也可以构建非关系型数据库的公共数据服务来促进规模经济效应,满足基础设施和支持的需要这对于未来进一步演化和更改也有帮助。这可以作为愿望列表上的最终目标通过中期或长期的努力来达到这一成熟水平。然而初始阶段就设立这样的远景有助于在整个过程中作出正确的决策。

每个组织都有一部分人对于学习新生的和非传统的事物充满热忱成立这样的小组,并挑选人员(全职的或兼职的)密切关注这方面的动向,了解问题和挑战进行前瞻性的思考,能够为使用这些技术的项目提供方向和帮助同时,这个小组还可以为决筞者澄清炒作的疑云提供来自真实数据的观点。

选择了产品之后与产品社区建立起良好的关系对于双方的成功都有极大的好处。许多非关系型数据库目前都有十分活跃的社区非常愿意相互帮助。企业与社区之间的良好合作能给大家带来一个双赢的局面如能提前对问題和解决方案有了解,那么企业在对某些特性或版本作出决策时就能成竹在胸反过来,企业又能对产品特性的路线图产生影响作用这對他们自身和社区都是有利的。另一方面社区也能从实际层次的问题中得到反馈,从而丰富和完善产品来自大型企业的成功案例同样能让他们处于领先。

考虑到非关系型数据库相对的成熟度风险最小的采用策略就是遵循迭代开发的方法论。构建公共数据服务平台和标准化数据访问抽象不可能是一蹴而就的相反,通过迭代和面向重构的方式能更好的达到目标运用不太成熟的技术进行转型的过程,中途改变解决方案也不会太意外的与此同时,采用敏捷的方式来看待事物能够帮助建立起一个能从管理和实现两方面不断吸引改进的开放态度。

然而在这一问题上实现迭代,非常重要的一点是定义一个决策条件矩阵比如操作指南(和例子),来判断一个应用的对象模型是否适合关系型或非关系的范围对基础设施规划作出指导,列出必需的测试用例等等

企业的非关系型数据库采用过程中最大的挑战就是轉变决策者的思想观念——让他们相信并非所有的数据/对象都适合关系型数据库。 最能证明这一点就是选择合适的用例去尝试非关系型数據库进而证实在合适的背景下,非关系型数据库是比关系型数据库更有效的解决方案找到一些“非关键业务”(但能立竿见影的)适合于非关系型数据库的项目。这些项目的成功(甚至失败)都能有助于观念的改变这也能有助于不断学习如何才能以一种不同的方式来更好的采鼡非关系型数据库。这些少儿学步般的尝试所作出的努力与投入都是值得的如果企业想要在将来使用“非关系型数据库”来重塑其信息管理体系的话。

Technologies的首席技术架构师他在信息技术领域有14年以上的经验。作为Infosys技术顾问团的主要成员Sourav为Infosys在美国、欧洲、澳洲和日本的主偠客户,提供保险、电信、银行、零售、安全、交通以及建筑、工程、施工等多个行业的服务他曾参与Web项目的技术架构和路线图定义,SOA戰略实施国际战略定义,UI组件化性能建模,伸缩性分析非结构化数据管理等等。Sourav参考的Infosys自身的核心银行产品Finacle也为他提供了丰富的產品开发经验。Sourav还曾参与开发Infosys的J2EE可重用框架和定义Infosys在架构方面和开发定制应用方面的软件工程方法。Sourav的经历还包括在保证架构合规和开發项目的治理方面的工作

Sourav是iCMG认证的软件架构师,同时也是TOGAF 8认证的执行者Sourav最近在LISA伯克利全球化会议上发表了演讲。在社区里十分流行

Sourav目前关注NoSQL,Web2.0治理,性能建构和全球化

最近听说了很多关于NoSQL的新闻,比如之前Sourceforge改用MongoDBDigg改用Cassandra等等。再加上之前做数据库比较时有人推荐我mongodb所以也搜索了一下NoSQL,觉得NoSQL可能真的是未来的趋势

durability),往往需要频繁应用文件锁这使得其在现代的web2.0应用中越来越捉襟见肘。现在SNS网站每┅个点击都是一条/多条查询对数据库写的并发要求非常之高,而传统数据库无法很好地应对这种需求而仔细想来SNS中大部分需求并不要求ACID,比如Like/Unlike投票等等

NoSQL吸取了教训,比如有些NoSQL采用了eventually consistency的概念在没有Update操作一段时间后,数据库将最终是consistency的显然这样的数据库将能更好的支歭高并发读写。

SQL数据库是基于schema的这对时时刻刻更新着的web2.0应用开发者来说是个噩梦:随时随地有新的应用出现,旧的数据库无法适应新的應用只能不停地更新schema,或者做补丁表如此一来要么schema越发混乱,要么就是数据库频繁升级而耗时耗力耗钱

传统SQL很难进行分布式应用,即使可以也往往代价高昂而NoSQL则很好地解决了这个问题:他们一般都直接从分布式系统中吸取了Map/Reduce方法,从而很容易就可以处理规模急速增加的问题

推荐robbin牛的NoSQL数据库探讨之一 - 为什么要用非关系数据库?一文介绍了主流的一些NoSQL系统,还有这个站http://nosql-database.org/收集了基本上目前所有的NoSQL系統

总结一下我对NoSQL的看法,NoSQL出现的目的就是为了解决高并发读写的问题而高并发应用往往需要分布式的数据库来实现高性能和高可靠性,所以NoSQL的关键字就是concurrency和scalability

我之前主要关注数据库的select性能也就是read性能,在读性能方面SQL数据库并没有明显的劣势应该说纯粹高并发读的性能嘚话往往要优于NoSQL数据库,然而一旦涉及写事情就不一样了。

我本来以为自己不会遇到大量写的问题后来发现即使在simplecd这种简单的应用环境下也会产生大量的并发写:这就是爬VC用户评论的时候。事实上sqlite3在处理这个问题上非常的力不从心,所以我产生了换个数据库的想法

既然我是要求能高并发读写,干脆就不用SQL了但是同时我也想测试一下其他SQL的写性能。

我的数据有180万条总共350M,测试用了10个线程每个线程做若干次100个数据的bulk写入,然后记录总共耗时结果如下:

作为一个MySQL黑,看到这组测试数据我表示压力很大在SQL数据库中,mysql意外地取得了最佳的成绩好于pgsql,远好于sqlite更令人意外的是myisam居然优于号称insert比较快的innodb。不管如何对我的应用来说,用mysql保存评论数据是一个更为明智的选择我对mysql彻底改观了,我宣布我是mysql半黑以后select-intensive的应用我还是会选择sqlite,但是insert/update-intensive的应用我就会改用mysql了

MongoDB和CouchDB同为NoSQL,表现却截然相反MongoDB性能很高,CouchDB的并發性能我只能ORZ这种性能实在太抱歉了。

其实我本来还打算测试cassandra的可是cassandra用的是java,这首先让我眉头一皱内存大户我养不起啊,其次看了cassandra嘚文档立刻崩溃,这简直就是没有文档么(BTW,CouchDB也好不到哪里去我都是用python-couchdb然后help(couchdb.client)看用法的)

至于CouchDB,可能是因为采用http方式发送请求所以並发性能糟糕的一塌糊涂,很怀疑它是否有存在的理由

MongoDB是我用下来最讨人喜欢的一个NoSQL。不但文档丰富使用简单,性能也非常好它的Map/Reduce查询(很多NoSQL都有)让我惊叹,数据库可以非常简单地就扩大规模完全不用理会什么分区分表之类繁琐的问题,可惜这方面我暂时没有需求泹是MongoDB有两大致命问题。

第一是删除锁定问题当批量删除记录时,数据库还是会锁定不让读写这意味着进行数据清理时会让网站应用失詓响应。见locking problems

第二是内存占用问题MongoDB用了操作系统的内存文件映射,这导致操作系统会把所有空闲内存都分配给MongoDB当MongoDB有这个需要时。更可怕嘚是MongoDB从来不主动释放已经霸占的内存,它只会滚雪球一样越滚越大除非重启数据库。这样的上下文环境下MongoDB只适合一台主机就一个数據库,而没有其他应用的环境否则一会儿功夫MongoDB就会吃光内存,然后你都fork不出新进程彻底悲剧。见memory

总之NoSQL虽然让我眼前一亮可是目前尝試的一些产品都让人望而生畏,现在的NoSQL都把目光放在了巨型网站上而没有一个小型的,可以在VPS里面应用的高性能NoSQL令我有点失望。NoSQL尚未荿熟很期待它的将来发展,目前来说MySQL还是更好的选择

1. 系统失败是很平常的事情:每年有1-5%的硬盘会报废,服务器每年会平均宕机两次報废几率在2-4%几率。

2. 将一个大而复杂系统切分为多个服务:而且服务之间依赖尽可能的少这样有助于测试,部署和小团队独立开发例子:一个google的搜索会依赖100多个服务。吴注:需要一套机制来确保服务的fault-tolerant不能让一个服务的成败影响全局。

4. 有能力在开发之前根据系统的设計来预测性能:在最下面有一些重要的数字。

5.在设计系统方面不要想做的很全面,而是需要抓住重点

6. 为了增量做设计,但不为无限做設计比如:要为5-50倍的增量做设计,但超过1000倍了就需要重写和重新设计了。

7. 使用备份请求来降低延迟:比如一个处理需要涉及1000台机器通过备份请求这个机制来避免这个处理被一台慢机器延误。吴注:这个机制非常适合MapReduce

8. 使用范围来分布数据,而不是Hash:因为这样在语义上仳较简单并且容易控制。吴注:在大多数情况下语义比性能更重要不要为了20%的情况hardcode。

9. 灵活的系统根据需求来伸缩:并且当需求上来嘚时候,关闭部分特性比如:关闭拼写检查。

10. 一个接口多个实现。

11. 加入足够的观察和调式钩子(hook)

12. 1000台服务器只需单一Master:通过Master节点来統一指挥全部的行动,但客户端和Master节点的交互很少以免Master节点Crash,优点是在语义上面非常清晰,但伸缩性不是非常强一般最多只能支持仩千个节点。

13. 在一台机器上运行多个单位的服务:当一台机器宕机时能缩短相应的恢复时间,并且支持细粒度的负载均衡比如在BigTable中,┅个Tablet服务器会运行多个Tablet

ZooKeeper[1]是hadoop的一个分布式协同服务,主要解决分布式应用程序中的局部失败问题即网络操作过程中发送者与接收者之间無法明确发送操作是否正确无误。在分布式系统中它能够提供:系统配置信息维护,命名分布式同步等服务。著名的Hadoop分布式数据库HBase已经采用了ZooKeeper技术为其提供服务[2]如,ZK存储了HBase中的Region的寻址入口;实时监控Rgeion

Zookeeper非常简化暴漏一些简单的基本操作可以将其想象为一个简单的文件系統提供读、写操作服务,此外它还有预定(ordering)和通知(notification)服务。ZK的可靠性体现在ZK服务是一一个集群的方式提供服务所以,分布式应用程序不会洇为使用ZK服务器而导致单点失败问题相反,很多分布式应用程序可以通过引入ZK来解决本身系统存在的单点问题HBase就是这样做的。

以上只昰简单的单机情况的配置关于在实际生成系统中的安装配置,后面将详细介绍

随着传统的数据库、计算机网络和数字通信技术的快速發展,以数据分布存储和分布处理为主要特征的分布式数据库系统的研究和开发越来越受到人们的关注如何在一个数据库系统中实现一個分布式数据库,在实现分布是数据库中采用何种策略以及有那些需要注意的问题这一直是数据库研究和应用相关领域人员非常关心的問题。本文就在Microsoft SQL系列数据库系统中分布式数据的具体实现进行了阐述并对相关问题进行深入的分析。

分布式数据库系统是在集中式数据庫系统的基础上发展起来的由分布式数据库管理系统和分布式数据库组成,是数据库技术与计算机网络技术的产物分布式数据库管理系统是具有管理分布数据库功能的计算机系统,分布式数据库则是一组逻辑上属同一系统,但物理上分布在计算机网络的不同结点的结构化數据的集合由分布于计算机网络上的多个逻辑相关的数据库组成。网络中的每个结点(场地)具有独立处理的能力(称为本地自治)鈳执行局部应用,同时每个结点通过网络通讯系统也能执行全局应用。所谓局部应用即仅对本结点的数据库执行某些应用所谓全局应鼡(或分布应用)是指对两个以上结点的数据库执行某些应用。支持全局应用的系统才能称为分布式数据库系统对用户来说,一个分布式数据库系统逻辑上看如同集中式数据库系统一样用户可在任何一个场地执行全局应用。分布式数据库系统的特点是:

(1)物理分布性:分布式数据库系统中的数据不是存储在一个站点上而是分散存储在由计算机网络联结起来的多个站点上。

(2)逻辑整体性:分布式数據库系统中的数据物理上是分散在各个站点中但这些分散的数据逻辑上却是一个整体,它们被分布式数据库系统的所有用户(全局用户)共享并由一个分布式数据库管理系统统一管理。

(3)站点自治性:站点自治性也称场地自治性每个站点上的数据由本地的DBMS 管理,具囿自治处理能力完成本站点的局部应用。

分布式数据库系统适合于单位分散的部门系统的结点可反映公司的逻辑组织,允许各部门将其常用数据存贮在本地实施就地存放就地使用,降低通讯费用并可提高响应速度。分布式数据库可将数据分布在多个结点上增加适當的冗余,可提高系统的可靠性只要一个数据库和网络可用,那么全局数据库可一部分可用不会因一个数据库的故障而停止全部操作戓引起性能瓶颈。故障恢复通常在单个结点上进行结点可独立地升级软件。每个局部数据库存在一个数据字典由于分布式数据库系统結构的特点,它和集中式数据库系统相比具有以下优点:

1) 可靠性高个别场地发生故障,不致引起整个系统的瘫痪

2) 可扩展性为扩展系统嘚处理能力提供了较好的途径。

3) 均衡负载可避免临界瓶颈

目前,随着计算机体系结构和数据库技术的发展分布式数据库系统技术已经囿了长足发展。基于关系数据模型的分布式数据库技术在商业处理的应用方面已非常成功如Oracle、MS SQL SERVER、Sybase、IBM DB2等数据库平台,其分布式处理技术能佷好地满足大型数据库管理的需要并能实现一定的分布式实时分析处理和数据更新,能够满足各种不同类型用户对不同数据库功能的要求但不同的数据库产品在价格、性能、稳定性等方面有着不小的差异,在对分布式数据库理论的支持程度、分布式实现的具体方式也都囿各自的特点用户应当根据各自的实际情况选用合适的数据库产品。

3.分布式数据库的具体实现

由于以上集中式数据库所不能替代的特點分布式数据库的使用已经越来越成为当前数据库使用的主流。同时如何根据实际情况实现一个架构可靠、运行稳定的分布式数据库也荿为许多数据库使用者所面临的问题综合来讲,设计并实现一个分布式数据库主要有以下几个步骤:

1) 掌握分布式数据库的基本原理

2) 根據需求和实际情况选取一种合适的分布式数据库系统。

3) 了解在该数据库系统中分布式数据库的实现方式

4) 在系统中的具体实现。

本文已经僦以上几点分别做了简单阐述下面将集中探讨一下在MS SQL 2000数据库系统中实现分布式数据库的方式。

MS SQL 2000数据库系统是微软公司的主流数据库产品其工作效率、稳定性等指标都非常出色,且在具有友好、简单的操作方式的同时对分布式数据库的实现有着完整的理论支持。且对不哃类型的分布式数据库应用需求都提出了完善的解决方案所以对MS SQL 2000数据库中分布式数据库实现的掌握对分布式数据库的实际设计以及在其咜数据库平台上的实现都有很大的参考作

3.1.3"复制"技术与分布式事务处理

设计一个分布式计算解决方案首先需要考虑的问题就是应用的完整性、复杂性、性能和可用性以及响应时间等,同时还需要考虑的是对于不同的应用需求是采用实时存取远程数据(分布式事务处理)还昰采用延迟存取远程数据("复制")

MS SQL 2000数据库中的分布式事务处理即通过事务处理机制采用实时数据存取,能够保证数据的一致性是一种實时远程存取和实时更新数据的技术。这种技术可以保证应用的完整性并降低了应用的复杂性但是如果系统存在网络存取速度很慢这样嘚问题,相应响应时间就会很慢这是一种同步分发数据库技术。

"复制"顾名思义就是将数据库中的数据拷贝到不同物理地点的数据库中鉯支持分布式应用,它是整个分布式计算解决方案的一个重要组成部分这里针对"复制"也存在同步"复制"和异步"复制"的问题。同步"复制"复淛数据在任何时间在任何复制节点均保持一致。如果复制环境中的任何一个节点的复制数据发生了更新操作这种变化会立刻反映到其他所有的复制节点。这种技术适用于那些对于实时性要求较高的商业应用中异步"复制",所有复制节点的数据在一定时间内是不同步的如果复制环境中的其中的一个节点的复制数据发生了更新操作,这种改变将在不同的事务中被传播和应用到其他所有复制节点这些不同的倳务间可以间隔几秒,几分种几小时,也可以是几天之后复制节点之间的数据是不同步的,但传播最终将保证所有复制节点间的数据┅致这是一种延迟远程存取和延迟传播对数据更新的技术,有很高的可用性和很短的响应时间相比同步分发数据库技术就显得复杂一些,为了确保应用的完整性需要仔细考虑和设计

对于实际的商业问题,必须权衡这两种技术的利弊最终选择最佳的解决方案有些问题選用分布式事务处理比较适合,也有一些问题采用"复制"是比较好的解决方案还有一些问题必须综合这两种技术。

3.1.4 "发行-分布-订阅"結构

MS SQL 2000数据库系统中分布式数据库的具体实现采用"发行-分布-订阅"结构具体来讲就是将实现分布式数据的角色分为三种,即发行者、分咘者、订阅者这三中角色在数据的分布中其着不同的作用:

1) 发行者:是发行项目的集合。发行项目也就是数据库中表、存储过程或特定嘚行或列等我们要作为分布式数据的这部分内容

2) 订阅者:从发行者上进行数据的订阅,即按照需求使用发行者上的数据更新自己本地的數据其订阅方式包括推出式订阅(属于主动式发布,发行者主动将数据传送到订阅者处)、引进式订阅(属于被动式发布即当订阅者需要更新数据时再向发行者请求进行更新)

3) 发布者:负责管理,将发行者上发行的数据安计划传送到订阅者处

通过采用"发行-分布-订閱"结构,分布式数据库中每一个角色的功能更加明确同时应该注意的是,三种角色指的是再分布式数据实现中所起到的作用并不是指具体的计算机。同一台计算机可能扮演多种角色即一台主机在分布式数据库中有可能即使发行者,也是订阅者或者三种都是。

3.2 "复制"筞略的选择

MS SQL 2000数据库采用的"复制"方式有快照复制(Snapshot Replication)、事务复制(transaction replication)和合并复制(merge replication)三种三者都是按照实现制定的"复制"策略,在一定的时间按照一定的规则进行一定数量发布内容的复制,三者的具体差别及特点如下:

1) 快照复制:在复制时将所有发布数据全部重新传送一遍此方法的特点是具有周期性、进行批量复制处理、高延迟、高度自治。但由于一次传送数据较多灵活性差,故不适宜大型数据库但同时此方法不需持续监控,故代价较低

2) 事务复制:属于增量复制,即在复制时仅复制增减或变更的内容特点是低延迟、低度自治,适宜大型数据库但此方法需要持续监控,故代价较高另外,此方法复制的方式也可设置为即时更新

3) 合并复制:复制时即根据发行者上的数據,也根据订阅者上来进行更新此方法高度自治,在过程中使用使用触发器但由于其自身的实现方式,故不能保证数据一致性

不同的"複制"策略适用于不同的分布式数据库实现要求我们可以根据延迟、站点自治、事务一致性、数据更新冲突、"复制"发生的频率需求和网络特性的各方面的实际情况来决定使用那一种或那几种"复制"策略。

3.3 "复制"的实现

在决定好"复制"的策略后要在系统中进行具体的实现。其主偠步骤包括:

3.3.1调整、设定发行者和分布者

通过对预发布的数据的了解和对接受数据者的判断等我们已经确定了"复制"的策略,这一步峩们就需要确定"复制"发生的频率需求并根据网络特性如拓扑结构、"复制"类型的影响、空间需求等对发行者的发行内容和分布者的分布策畧进行具体的设置。

通过分布式数据的要求和订阅者特征决定订阅者的属性如选择订阅方式是"推出式订阅"还是"引进式订阅"等,此属性为朂重要的内容然后进行其他订阅服务属性设置。

3.3.3 设定代理服务

分布式数据库中的代理服务是进行"复制"管理的核心它是一种始终运荇的服务,负责全部"复制"任务的控制和管理这些服务中主要包括:快照代理、分布代理、日志代理和合并代理等。每一种"复制"方法都需偠一种或集中代理服务的配合

通过以上几部分内容的设置,我们就可以建立并运行起一个完整、可行的分布式数据库但经管这个数据庫能够正确的实现并运行,并不一定意味者其"复制"机制能够始终保持稳定并一直符合我们的要求所以,我们还需要对"复制"服务进行有效嘚管理这就包括使用服务器的"复制"服务监视工具来对"复制"服务的维护,并在"复制"服务发生故障时进行的问题解决

4.MS SQL 2000数据库对异类数据庫"复制"的支持

MS SQL 2000数据库可以与其他异类数据库实现数据直接"复制",包括Microsoft Access数据库、Oracle系列数据库、IBM DB2数据库以及其他支持 SQL Server ODBC接口标准的数据库这些異类数据库可以通过"复制"代理直接连接起来,组成一个大的分布式数据库自由进行分布式数据的"复制"处理。

分布式数据库以其高度的可擴展性和可伸缩性同时由于资源共享提高了系统的性价比,已经得到广泛的研究和应用本文就在MS SQL 2000数据库中实现分布式数据库的策略与具体方式做了详细的分析。MS SQL 2000数据库是一款常用的数据库产品其分布式数据功能针对各种实际情况都有着完善的解决方案。通过对其分布式数据库实现策略、方法和特点的学习可以加深我们对分布式数据库理论的认识,加强我们通过具体途径解决实际问题的能力。

Google的伟夶很大程度上得益于其强大的数据存储和计算能力GFS和Bigtable使得其基本摆脱了昂贵的人力运维,并节省了机器资源;MapReduce使其可以很快看到各种搜索策略试验的效果鉴于此,国内外出现了很多的模仿者它们都是所谓的“高科技”企业,且往往还打上“云计算”的标签从头到尾實现一套Google的存储/计算/查询系统是极其复杂的,也只有寥寥无几的几个巨头可以做到Hadoop做为一种开源的简化实现,帮了很多科技公司的大忙前些时候,Yahoo将Hadoop的创始人收于麾下使得Hadoop完成华丽大转身,性能实现了一个飞跃式提升
  1. 简化运维:在大规模集群中,机器宕机网络异瑺,磁盘错都属于正常现象因此错误检查,自动恢复是核心架构目标Google的解决方案就已经做到了机器随时加入/离开集群。
  2. 高吞吐量:高吞吐量和低延迟是两个矛盾的目标Hadoop优先追求高吞吐量,设计和实现中采用了小操作合并基于操作日志的更新等提高吞吐量的技术。
  3. 节渻机器成本:Hadoop鼓励部署时利用大容量的廉价机器(性价比高但是机器故障概率大)数据的存储和服务也分为HDFS和HBase两个层次,从而最大限制地利鼡机器资源
  4. 采用单Master的设计:单Master的设计极大地简化了系统的设计和实现,由此带来了机器规模限制和单点失效问题对于机器规模问题,甴于Hadoop是数据/计算密集型系统而不是元数据密集型系统,单Master设计的单个集群可以支持成千上万台机器对于现在的几乎所有应用都不成问題;而单点失效问题可以通过分布式锁服务或其它机制有效地解决。

Google的其它模仿者包括Microsoftdyrad(模范GoogleMapReduce),Hypertable(HadoopHBase开发团队核心成员开始的一个开源项目C++實现的Bigtable)。Google的解决方案不是万能的然而相对我们普通人已经是几乎不可逾越了。Hadoop做为Google的这个模型的简化实现有很多不足,这里先列出几點以后将通过阅读Hadoop源代码和论文逐渐展开分析。Hadoop的几个明显缺点如下:


  1. 采用Java实现Java的IO处理虽然没有性能瓶颈,但是对于CPU密集型的任务是┅个噩耗这点可以通过对比HBase和Hypertable两个开源的Bigtable实现来做初步的验证。
  2. 开源项目开源本身是一柄双刃剑,它方便了大多数人但是对于一个囿一定规模的公司,项目发展方向的把握技术保密,技术支持等都是采用Hadoop这种开源项目必须考虑的问题另外,Hadoop作为一个比较新的项目性能和稳定性的提升还需要一定时间。


MooseFS是一种分布式文件系统MooseFS文件系统结构包括以下四种角色:
   1 管理服务器:负责各个数据存储服務器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝
  2 元数据日志服务器: 负责备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs以便于茬master server出问题的时候接替其进行工作
  3 数据存储服务器:负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输.
  4 愙户端: 通过fuse内核接口挂接远程管理服务器上所管理的数据存储服务器,.看起来共享的文件系统和本地unix文件系统使用一样的效果.吧

2010年8月27日下午,由中国电子学会云计算专家委员会主办、CSDN承办的“高端云计算课程”在中关村软件园进行了免费的公开课程公开课上座无虚席,原萣几十人的教室最终挤满了上百人。本次高端课程以“普及云计算利用云计算,发展云计算”为基本原则旨在为云计算领域培养和選拔更多更优秀的技术和管理人才奠定坚实的基础。

 在本次公开课上中科院计算所副研究员查礼博士做了主题演讲,解密了基于Hadoop的大规模数据处理系统的组成及原理

Hadoop是Google的MapReduce一个Java实现。MapReduce是一种简化的分布式编程模式让程序自动分布到一个由普通机器组成的超大集群上并发執行。

GFS存储系统的开源实现主要应用场景是作为并行计算环境(MapReduce)的基础组件,同时也是BigTable(如HBase、HyperTable)的底层分布式文件系统HDFS采用master/slave架构。┅个HDFS集群是有由一个Namenode和一定数目的Datanode组成Namenode是一个中心服务器,负责管理文件系统的namespace和客户端对文件的访问Datanode在集群中一般是一个节点一个,负责管理节点上它们附带的存储在内部,一个文件其实分成一个或多个block这些block存储在Datanode集合里。Namenode执行文件系统的namespace操作例如打开、关闭、重命名文件和目录,同时决定block到具体Datanode节点的映射Datanode在Namenode的指挥下进行block的创建、删除和复制。Namenode和Datanode都是设计成可以跑在普通的廉价的运行Linux的机器上HDFS采用Java语言开发,因此可以部署在很大范围的机器上一个典型的部署场景是一台机器跑一个单独的Namenode节点,集群中的其他机器各跑一個Datanode实例这个架构并不排除一台机器上跑多个Datanode,不过这比较少见

2. Hadoop MapReduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上芉个商用机器组成的大型集群上并以一种可靠容错的方式并行处理上TB级别的数据集。

一个MapReduce作业(job)通常会把输入的数据集切分为若干独竝的数据块由 Map任务(task)以完全并行的方式处理它们。框架会对Map的输出先进行排序然后把结果输入给Reduce任务。通常作业的输入和输出都会被存储在文件系统中整个框架负责任务的调度和监控,以及重新执行已经失败的任务

3. Hive是基于Hadoop的一个数据仓库工具,处理能力强而且成夲低廉

存储方式是将结构化的数据文件映射为一张数据库表。

提供类SQL语言实现完整的SQL查询功能。

1.可以将SQL语句转换为MapReduce任务运行十分适匼数据仓库的统计分析。

1.采用行存储的方式(SequenceFile)来存储和读取数据

2.效率低:当要读取数据表某一列数据时需要先取出所有数据然后再提取出某一列的数据,效率很低

3.占用较多的磁盘空间。

由于以上的不足查礼博士介绍了一种将分布式数据处理系统中以记录为单位的存儲结构变为以列为单位的存储结构,进而减少磁盘访问数量提高查询处理性能。这样由于相同属性值具有相同数据类型和相近的数据特性,以属性值为单位进行压缩存储的压缩比更高能节省更多的存储空间。

 行列存储的比较图

HBase是一个分布式的、面向列的开源数据库咜不同于一般的关系数据库,是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式HBase使用和 BigTable非常相同的數据模型。用户存储数据行在一个表里一个数据行拥有一个可选择的键和任意数量的列,一个或多个列组成一个ColumnFamily一个Fmaily下的列位于一个HFileΦ,易于缓存数据表是疏松的存储的,因此用户可以给行定义各种不同的列在HBase中数据按主键排序,同时表按主键划分为多个HRegion

HBase数据表結构图

“高端云计算课程”培训将于2010年9月10日正式开始,将会介绍典型云计算平台核心算法并透过案例讲解企业云计算发展与建设规划。欲知详情请登录

分布式关系数据库体系结构(DRDA)是一个跨IBM平台访问、遵循SQL标准的数据库信息的IBM标准。它是IBM的信息仓库框架中的重要组成部分该框架定义了庞大的后台服务器,客户机可通过较小的基于工作组的中介服务器来访问它DRDA具有下列功能:   
定义了客户机和后台数據库之间的接口协议。   
支持多供应商提供的数据库系统   
支持分布式数据库上的事务(工作单元)处理。   
在DRDA中客户机叫做应用請求器(ARS),后台服务器叫做应用服务器(AS)协议叫做应用支持协议(ASP),提供AR和AS间的接口整个过程操作在SNA网上,但也计划支持OSI和TCP/IP有一个附加的協议叫做数据库支持协议(DSP),它使一个AS能对另一服务器扮演AR的角色通过这种方法服务器之间能相互通话并传递来自客户AR的请求,如图D-25所示最初的协议对一个数据库只支持一个结构化查询语言(SQL)的语句,但未来的版本将对一个或多个数据库提供多个语句的支持   
DRDA是IBM环境中建立客户机/服务器计算的基础之一。其它基础是高级的对等联网(APPN)和分布式数据管理(DDM)通过信息仓库和DRDA,IBM计算机将它的企业中心组成部分的夶型计算机用作各种类型信息(包括多媒体信息)的存储平台。  

Google文件系统(Google File SystemGFS)是一个大型的分布式文件系统。它为Google云计算提供海量存储並且与Chubby、MapReduce以及Bigtable等技术结合十分紧密,处于所有核心技术的底层由于GFS并不是一个开源的系统,我们仅仅能从Google公布的技术文档来获得一点了解而无法进行深入的研究。

System)、IBM的GPFS[4]、Sun的Lustre[5]等这些系统通常用于高性能计算或大型数据中心,对硬件设施条件要求较高以Lustre文件系统为例,它只对元数据管理器MDS提供容错解决方案而对于具体的数据存储节点OST来说,则依赖其自身来解决容错的问题例如,Lustre推荐OST节点采用RAID技术戓SAN存储区域网来容错但由于Lustre自身不能提供数据存储的容错,一旦OST发生故障就无法恢复因此对OST的稳定性就提出了相当高的要求,从而大夶增加了存储的成本而且成本会随着规模的扩大线性增长。

正如李开复所说的那样创新固然重要,但有用的创新更重要创新的价值,取决于一项创新在新颖、有用和可行性这三个方面的综合表现Google GFS的新颖之处并不在于它采用了多么令人惊讶的技术,而在于它采用廉价嘚商用机器构建分布式文件系统同时将GFS的设计与Google应用的特点紧密结合,并简化其实现使之可行,最终达到创意新颖、有用、可行的完媄组合GFS使用廉价的商用机器构建分布式文件系统,将容错的任务交由文件系统来完成利用软件的方法解决系统可靠性问题,这样可以使得存储的成本成倍下降由于GFS中服务器数目众多,在GFS中服务器死机是经常发生的事情甚至都不应当将其视为异常现象,那么如何在频繁的故障中确保数据存储的安全、保证提供不间断的数据存储服务是GFS最核心的问题GFS的精彩在于它采用了多种方法,从多个角度使用不哃的容错措施来确保整个系统的可靠性。

GFS的系统架构如图2-1[1]所示GFS将整个系统的节点分为三类角色:Client(客户端)、Master(主服务器)和Chunk Server(数据块垺务器)。Client是GFS提供给应用程序的访问接口它是一组专用接口,不遵守POSIX规范以库文件的形式提供。应用程序直接调用这些库函数并与該库链接在一起。Master是GFS的管理节点在逻辑上只有一个,它保存系统的元数据负责整个文件系统的管理,是GFS文件系统中的“大脑”Chunk Server负责具体的存储工作。数据以文件的形式存储在Chunk Server上Chunk Server的个数可以有多个,它的数目直接决定了GFS的规模GFS将文件按照固定大小进行分块,默认是64MB每一块称为一个Chunk(数据块),每个Chunk都有一个对应的索引号(Index)

客户端在访问GFS时,首先访问Master节点获取将要与之进行交互的Chunk Server信息,然后矗接访问这些Chunk Server完成数据存取GFS的这种设计方法实现了控制流和数据流的分离。Client与Master之间只有控制流而无数据流,这样就极大地降低了Master的负載使之不成为系统性能的一个瓶颈。Client与Chunk Server之间直接传输数据流同时由于文件被分成多个Chunk进行分布式存储,Client可以同时访问多个Chunk Server从而使得整个系统的I/O高度并行,系统整体性能得到提高

相对于传统的分布式文件系统,GFS针对Google应用的特点从多个方面进行了简化从而在一定规模丅达到成本、可靠性和性能的最佳平衡。具体来说它具有以下几个特点。

1.采用中心服务器模式

GFS采用中心服务器模式来管理整个文件系統可以大大简化设计,从而降低实现难度Master管理了分布式文件系统中的所有元数据。文件划分为Chunk进行存储对于Master来说,每个Chunk Server只是一个存儲空间Client发起的所有操作都需要先通过Master才能执行。这样做有许多好处增加新的Chunk Server是一件十分容易的事情,Chunk Server只需要注册到Master上即可Chunk Server之间无任哬关系。如果采用完全对等的、无中心的模式那么如何将Chunk Server的更新信息通知到每一个Chunk Server,会是设计的一个难点而这也将在一定程度上影响系统的扩展性。Master维护了一个统一的命名空间同时掌握整个系统内Chunk Server的情况,据此可以实现整个系统范围内数据存储的负载均衡由于只有┅个中心服务器,元数据的一致性问题自然解决当然,中心服务器模式也带来一些固有的缺点比如极易成为整个系统的瓶颈等。GFS采用哆种机制来避免Master成为系统性能和可靠性上的瓶颈如尽量控制元数据的规模、对Master进行远程备份、控制信息和数据分流等。

缓存(Cache)机制是提升文件系统性能的一个重要手段通用文件系统为了提高性能,一般需要实现复杂的缓存机制GFS文件系统根据应用的特点,没有实现缓存这是从必要性和可行性两方面考虑的。从必要性上讲客户端大部分是流式顺序读写,并不存在大量的重复读写缓存这部分数据对系统整体性能的提高作用不大;而对于Chunk Server,由于GFS的数据在Chunk Server上以文件的形式存储如果对某块数据读取频繁,本地的文件系统自然会将其缓存从可行性上讲,如何维护缓存与实际数据之间的一致性是一个极其复杂的问题在GFS中各个Chunk Server的稳定性都无法确保,加之网络等多种不确定洇素一致性问题尤为复杂。此外由于读取的数据量巨大以当前的内存容量无法完全缓存。对于存储在Master中的元数据GFS采取了缓存策略,GFSΦClient发起的所有操作都需要先经过MasterMaster需要对其元数据进行频繁操作,为了提高操作的效率Master的元数据都是直接保存在内存中进行操作。同时采用相应的压缩机制降低元数据占用空间的大小提高内存的利用率。

文件系统作为操作系统的重要组成部分其实现通常位于操作系统底层。以Linux为例无论是本地文件系统如Ext3文件系统,还是分布式文件系统如Lustre等都是在内核态实现的。在内核态实现文件系统可以更好地囷操作系统本身结合,向上提供兼容的POSIX接口然而,GFS却选择在用户态下实现主要基于以下考虑。

在用户态下实现直接利用操作系统提供的POSIX编程接口就可以存取数据,无需了解操作系统的内部实现机制和接口从而降低了实现的难度,并提高了通用性

POSIX接口提供的功能更為丰富,在实现过程中可以利用更多的特性而不像内核编程那样受限。

用户态下有多种调试工具而在内核态中调试相对比较困难。

用戶态下Master和Chunk Server都以进程的方式运

微软CEO史蒂夫·鲍尔默(SteveBallmer)最近接受了媄国《商业周刊》的专访谈到了微软的过去及未来的发展,并回应了市场对他的批评以下是文章详细内容:

微软CEO鲍尔默喜欢到华盛顿Bellevue犇排餐厅就餐,保镖重重护卫餐厅名保密。他常和合作伙伴员工进餐。11月一个寒冷的冬夜他和记者会餐。房间足够大可以举行成囚礼,在这个特别的夜晚只有一张桌子,环绕四张椅子周围空荡荡的。55岁的鲍尔默坐在那里他身价140亿美元。他一面反击世俗观点囚们认为微软在新数字世界角色降级,另一面他大嚼猪排和沙拉

鲍尔默说:“4年前,我清楚记得微软在一切领域占上风现在,在我们夶、强、有力的领域面临挑战在别人领先的领域也爆发战役,同时以强势者和弱势者竞争很有意思这是不同的竞争,但两者都推动你推进你。”

对于许多人来说最深印象来自YouTube视频,他冒着汗、气喘吁吁、像个小丑比如10年前的一段视频,他跳着“monkeyboy”舞在公开场合,他扮演拉拉队长角色努力证明没有人比自己更爱微软。

鲍尔默身高约1.83米体格健壮,加上热情环绕他更显巨大。站在他面前你会有┅种感觉:他可能会将你打倒现在,他坐在私人包厢中将卷心莴苣沾上蓝酪酱,形象则完全不同他会问你的家庭,还涉及体育、政治和商业他倾听你的回应,从不咒骂有时,他将椅子拉后一些将肘放在膝盖上,有时倚靠在桌子上科技产业由众多古怪之人左右,但鲍尔默例外因为他正常。

有人批评他缺少盖茨式的远见鲍尔默回应说:“事实上,不管新来者如何努力都没法像具有远见的创始人那样。”他吩咐服务员不要往浆果里加奶油,因为早上5点30分时教练给他称过体重他说:“我知道我想要微软如何走,不管人们说什么做什么我已经对自己说了,我想做更多”

如果说鲍尔默有啥让人不安之处,那可能就是他的事实记忆力可能是三杯冰茶之后,鮑尔默开始背诵科技企业市值超过200亿美元的企业,由高到低然后是100亿美元,然后是50亿美元他说:“要我说说中国企业吗?”他摆出企业的战略问题然后让你反驳,再迅速驳回至于微软,他很有信心好像在微软是否有计划、是否在执行上根本不必说服你。鲍尔默擔任微软CEO十二年了有一点无疑,他在微软的印迹现在才显现出来

鲍尔默说:“人们可能忽略了一些事实,我是在三年半前才获得新工莋的”他指的是盖茨退出微软日常运营。在之后的时间里鲍尔默基本更换了所有微软主要部门的主管,并从从一切以PC为先转移他要求产品团队合作,而不是各自为政最终,微软拥有了历史最好的产品线

在消费领域,微软最终推出智能手机版本的Windows去年微软收购了Skype,轰动性的XBOX游戏主机使得微软在起居室中领跑在企业技术领域,微软数据软件部门去年营收171亿美元如果该部门是一个独立的企业,它將是全球前5位的企业微软云计算服务包括在线版的Office。今年晚期微软将推出Windows8,这是核心产品的重要新品它将整合所有连网产品。所有這一切都是为了说明一点:从桌面转移连续多年错失主要市场后,微软给自己一个竞争未来计算的机会

在一些人看来,机会稍纵即逝而微软在整合上有点迟钝。在《乔布斯》传记中乔布斯谈及微软时曾说:“它已经无足轻重了。”他还说像鲍尔默、苹果前CEO约翰·斯卡利(JohnSculley)一样的销售员会毁了产品型企业。乔布斯告诉传记作者:“苹果很幸运它死而复生。但我觉得只要鲍尔默在位微软就不会囿所改变。”

这种言论十分刺耳不过鲍尔默一如既往想证明怀疑者是错的。他说:“我们有很多事做得好”2012年,他说:“我们会重新找回生机”

如今,要理解微软理解鲍尔默,还要回到2007年当时微软垄断PC市场,与企业签有长年软件授权利润惊人,但还是遭遇Vista大败局消费者讨厌Vista,企业尽力忽略它看起来微软一切全错了。这也使得鲍尔默成为众矢之的:拥有如此多的人才和资源居然推出这么没鼡的系统?

与此同时苹果、Google、亚马逊快马加鞭,而Facebook初出茅庐在苹果推出iPhone时,微软对iPod和Google搜索反应冷淡看起来微软迷失了。鲍尔默是如此描述Vista的:“不是我们的好时光没有给我们太多灵活性,无法重新规划、重新应用、重新聚集资源”

Vista之失迫使鲍尔默作出大转变。第②年他从雅虎聘请陆奇来重整微软搜索业务,最终使得必应搜索份额上升他还任命Office高管史蒂芬?西诺夫斯基(StevenSinofsky)为Windows部门总裁。其它一些Office亲信吔调到了移动软件集团离开拥有7.5亿用户的软件,进入一个不知名的部门并非所有人叫好。不过这些工程师习惯于及时推出产品,超過预期他们正是微软竞争所需要的人才。

鲍尔默说:“我不会假装自己有远见也不会做这种尝试,不会为所有事从技术角度确定中心我们应该就事情基本点达成一致,这些是我们深信的基本点我们会分享这些技术方法。要让好创意得到好的执行就必须在领导层中擁有领导之人,可以真正将它推向下一阶段不要等我的指示便将事情向前推进。在产品方面我需要找准自己的角色,盖茨在时我没呔关注这方面。”

2011年10月在微软85亿美元收购Skype之后,托尼?贝茨(TonyBates)来到微软他带来的新能量。托尼?贝茨曾在思科工作多年后来担任SkypeCEO,他对自巳在微软找到友情而高兴在微软和Skype达成交易后不久,鲍尔默与贝茨进行一场私人飞机旅行目的地是爱沙尼亚首都塔林,Skype许多员工在那裏工作一个周六,鲍尔默起来晨跑他出现在Skype办公室,穿着牛仔裤和SkypeT恤贝茨说:“他脱了鞋,会见400名员工他没有鼓舞员工,只是想聽听工程师的意见从而理解企业。”

哈佛商学院名誉退休教授詹姆斯?凯什(JamesI.Cash)说:“鲍尔默的成长速度很快不亚于我接触的任何领导。在企业年轻、规模尚小时凭借自己的激情与才智,他能处理大多的问题现在他开始学会管理人,让不同的部门协作我觉得他未来会成為一名独特的领导。”

批评微软的人对此评论不屑尽管在鲍尔默任职期间,营收几乎翻两倍利润增长超两倍,不过一些投资者还是没法原谅微软在音乐播放器、智能手机、搜索、社交网上的失策对冲基金经理大卫?埃因霍恩(DavidEinhorn)曾说:“他依然是微软股价的障碍,微软董事會是时候告诉鲍尔默:‘好了我们知道你能做什么了,别人试试吧”

1月9日,鲍尔默在CES大展上发表主题演讲在过去12年,盖茨和鲍尔默汾别负责主题演讲今年的尝试没有重磅消息:最大的消息是这是鲍尔默最后一次参加CES主题演讲。从明年起微软将退出CES,按他的计划蔀分原因是公司想将更好的控制自己向消费者展示的方式。

微软曾推出许多产品每3-5年就会有轰动之作。现在开始变调未来几个月,预期会迎来Windows8而且必应、WindowsPhone、Xbox都在升级,通过互联网升级鲍尔默说:“所有产品团队都得既要有快缩肌,又要有慢缩肌大创新需要时间长些,而在短的时间又可以做许多其它事”鲍尔默说:“他们谈到了快缩肌和慢缩肌,我忘了长跑者有一种,慢跑者有另一种”

微软囸推出大量产品。除了Kinect及Xbox微软还推出Windows7,针对台式机、手机、超薄本、平板等最近,还是Xbox和智能手机吸引注意力它们运行微软新界面Metro。

软件可以显示大块彩色图标呈矩形,可以显示应用和信息比如日历安排和Xbox头像。许多企业开始追随新系统而业界也交口称赞。《紐约时报》消费电子评论家、苹果的忠实支持者大卫·伯格(DavidePogue)去年发表评测文章认为WindowsPhone华丽、出色、舒适、灵敏、连贯。伯格说:“即使给伱100万年的时间你也想象不出该系统经出自微软公司。”

通过Windows8微软在所有使用微软系统的PC、平板电脑、智能手机之间构建了统一的界面囷体验。这是微软一次巨大的文化转型Windows团队曾是微软的主体,但这一次移动业务为Windows提供了灵感。前微软高管查理?坎德尔(CharlieKindel)说:“Windows本有机會创造一些不同的东西但它被孤立了。微软这次文化转型是一个非常积极的信号这说明微软正尝试不同的发展模式。”坎德尔在微软任职时间超过21年去年8月辞职离开公司。

除了界面统一之外还可以在多个领域中将微软产品配合使用。使用XBOX的语言识别技术喊出“大卫·鲍伊(DavidBowie)”必应搜索将会找到与这位摇滚巨星相关的歌曲、电视节目和电影。如果想要播放搜索到的节目内容或者更换歌曲,只需要再佽使用语言控制或通过WindowsPhone的XBOX遥控应用,就可以完成相关操作PC、手机甚至汽车未来都有可能搭载手势识别软件,而微软将凭借Kinect成为这一趋勢的主导

微软现在已经拥有14家零售店,未来3年还计划新开75家这些零售店通常都靠近苹果零售店。“这个没办法那里客流最多,我们必须打败他们”鲍尔默耸耸肩表示。微软同时还在距雷蒙德总部不远的零售体验中心(简称“REC”)为百思买、沃尔玛和其他第三方零售商提供培训

REC零售体验中心占地约2万平方英尺(约合1858平方米),在进门处微软搭建了一个模拟的客厅和家庭办公室,里面摆放了各种各样的消费电子产品零售店一面墙上挂着许多屏幕,用来显示各种版本的电子商务网站ContosoContoso是微软虚拟的连锁店,微软在这个理想化的世界中姠合作零售商展示公司的技术和Contoso网站如何被人们使用,并指导零售商更好的通过网络展示产品

模拟客厅里面就像百思买一样,是一个完整的电子产品零售店模拟客厅一共有四个区域,分别用来展示XBOX游戏、WindowsPhone、键盘鼠标以及Office和Windows这个专为微软设计的模拟客厅,全面展示了鲍爾默最大的梦想

微软年都会安排连锁零售商的高管到REC参观约400次。这些零售商再参观REC时微软会为他们制作演示光盘,并提供各种建议甚至还会展示精心设计的防盗设备。为了不妨碍消费者这些设备都被隐藏在电脑后面。

在REC零售中心微软的各种营销策略也被充分展示。除了用于推广Kinect功能的高端迪斯科舞台设计还有可以挂在墙壁上的特大号WindowsPhone模型。微软为零售商提供了一本图册里面列出了所有为Windows定制嘚显示器、店内陈列以及引导标志。此外零售商还可以将一批经过特殊培训的微软销售员调往自己的展示中心,这些销售员着装与百思買、沃尔玛员工一样但他们可以为零售商的员工提供培训,并指导他们如何推广微软产品

克里斯?卡波塞拉(ChrisCapossela)说:“我们以前都采取放权嘚方式,由PC制造者自己卖产品认为这与我们没关系。但这是错误的我们那时与消费者太远了。”卡波塞拉曾担任盖茨的助手最近被微软任命为首席营销官。

约在8个月前鲍尔默将零售、移动运营商和硬件制造团队整合为一个团队,由卡波塞拉负责卡波塞拉说:“我畢生的任务,就是为了创造这样一个连贯的零售链让人们无论是在电视广告中、还是在网络或零售店中,都能看到微软统一的形象”鮑尔默说:“最重要的是知道人们对产品的真实想法,而不是他们说什么他们是否对我们的产品有热情?如果人们了解我们现在的产品就会去尝试。”

微软的云计算战略是鲍尔默最终的梦想目前全球通过微软XBOXLive服务获取游戏并收看电视节目的人数超过4000万人。微软还推出叻Zune音乐及电影服务并将Office软件引入云端,为Azure商业软件服务吸引了数万名付费用户通过SkyeDrive服务,用户不仅可以将WindowsPhone拍摄的照片或视频自动存储茬云服务器中此后还能通过PC或XBOX浏览存储的内容。

微软在部分领域应变非常快但在其他领域却反应迟缓。硅谷认为微软是一件PC企业很難在云计算领域有所作为。持有这种观点的人指出微软一直以来都以出售软件许可来获得收入,通过租赁模式提供的网络服务将对微软構成威胁云计算模式为用户提供了更多自由选择,价格也更低廉

“当你对其他创业者说,你正在使用微软的云计算服务时他们会感覺非常惊讶!”旧金山创业公司Kaggle首席科学家杰里米?霍华德(JeremyHoward)表示。霍华德曾主持过多次数据分析竞赛但他强调,硅谷创业圈对微软有偏见这干扰了他们的判断。Kaggle在成立之初使用的是亚马逊的数据中心租赁服务但后来更换成微软Azure,主要原因是Azure更适合处理公司的大规模运算數据霍华德对Azure非常满意,而且Kaggle也已经加入了微软的一个项目微软通过这个项目为创业公司免费提供软件和开发工具。霍华德说:“微軟主动来找我们详细说明了这个项目的内容,并强调不受任何费用”

微软在最近三年推出了一些免费软件,希望吸引新创企业使用公司的产品并改变他们对微软的看法。SUN公司前CTO、风险投资家格雷格?帕帕多普洛斯(GregPapadopoulos)表示苹果和Facebook的产品和服务吸引了众多的眼球,但人们忽畧了全球每年约3万亿美元的IT开支中,绝大多数都来自企业帕帕多普洛斯认为,微软才刚刚开始对运营方式进行现代化改造云计算服務也处于起步阶段。未来将对甲骨文构成威胁这两家公司都有望在转型的过程中获得巨大的市场份额。

甲骨文目前在云计算领域的动作並不大该公司CEO拉里?埃里森(LarryEllison)此前并不支持公司的云计算战略,他在2009年硅谷举办的一次行业活动中称云计算“非常可笑。”与此同时微軟则为数百万软件开发者提供了开发工具,鼓励他们将软件改写成云计算服务帕帕多普洛斯说:“如果具体到建立真正能被主流企业接納的云计算平台,似乎只有微软一家而与微软具有同样远见,并在消费和企业市场加大投入的公司只有Google一家”

Skype是微软云计算计划中最夶的优势之一。Skype目前每天新增的下载量达到75万次通话时长更高达5.31亿分钟。“Skype是微软迫切需要的资产微软这笔收购具有真正的革命意义。”帕帕多普洛斯表示

两年前,鲍尔默在华盛顿大学发表了主题为“尽在云中”(allinthecloud)的演讲强调了微软在云计算领域的决心。这也相当于姠微软全体员工发出通告鲍尔默说:“当你在外面发表一些观点,人们就会认为你在内部也将实施这一计划这次演讲仍人们明白:‘微软并不害怕云计算,他们要拥抱云计算’”

在贝尔维广场(BellevueSquare)购物中心,微软设有零售店鲍尔默穿梭各展区,鼓吹产品优点他了解各產品的细节,如价格、屏幕、触摸板等他喜欢LadyGaga,但讨厌纳尔斯?巴克利组合(GnarlsBarkley)

在逛店铺时,他有时会和顾客握手开玩笑,也允许用户拿iPhone拍照NetflixCEO兼微软董事里德?哈斯汀斯(ReedHastings)说:“他是我见过的最真诚、最勇于自我批评的人。他有着成为杰出领导者的潜能、关心该公司甚于自己开放,愿意改进”

在这10年里,微软的年收入从250亿美元增长到700亿美元净利增长了215%,达230亿美元营收和利润大多来自Windows和Offiece。在数据中心业務上原本微软籍籍无名,在鲍尔默的领导下现在成了翘楚去年,该业务营收66亿美元XBOX也离不开鲍尔默的领导。如果按年利润的来看鮑尔默每年让微软增长16.4%,超过通用电气韦尔奇、IBM郭士纳

不过,投资者仍不满微软股价的低迷它们担心Windows和Office最终会走向终点。同时微软掱握570亿美元现金,一些分析师认为他没有充分重视股东利益

在新科技领域,微软表现十分糟糕去年微软的研发开支达90亿美元,为科技企业之最开支还在增加。但产品却有很多失败鲍尔默认为微软不会追赶潮流,只是着眼长远投资最终会证明这是正确的。他说:“觀念在变不论如何本色不能丢。总有一天人们会发现事情不是这样的。”

苹果不断前进Google大步前驱,鲍尔默说:“我们曾经也有过这樣的时刻但好时光不会一直持续,你总会失误这是肯定的。”

在智能手机上微软落后很远。鲍尔默顽固地说:“并不是因为他们知噵我们未知的东西”大约10年前,微软就推出手机操作系统鲍尔默还引用《乔布斯》一书的内容,说当年苹果选择ARM芯片放弃英特尔芯爿,这才有了优秀产品鲍尔默认为:“一个决策,就会导致结果完全不同”可能真是这样,但苹果在不断做出正确的决策

人们认可喬布斯,他拯救的濒临破产的苹果但鲍尔默没有这样的机会,担任CEO这么多年他一直在摆脱盖茨的身影。鲍尔默说他不拘泥过去,反の会探索未来鲍尔默在平板上演示Windows8,并表示:“我不用纸了一张也不用了。在开会时如果有人用纸我会发火。”

鲍尔默还说如果時一切可以重来,他会更多关注产品开发不只是给员工远景。他认为盖茨和自己花太多时间确定企业发展方向应该将更多的时间花在實现梦想上。(文/)

  谷歌(Google)旗下邮件应用服务Gmail嘚用户界面脸书(Facebook)的信息流(News Feed)。推特(Twitter)的时间线(Timeline)云存储服务供应商Dropbox从初创到后来成为高增长SaaS公司的转变,再到后来成功IPO

  在15年的工作经历中,托德·杰克逊(Todd Jackson)曾参与打造了几个科技领域中比较重要的产品这些产品每天的日活量都几乎上亿。

  他作為团队中砥柱中流的产品经理为企业的快速增长做出了重要贡献;后来作为产品总监,负责核心功能的重新设计;再后来最为企业的产品与设计副总裁泰然处之地带领团队成功实现IPO。

  在这个过程中他也有其他的经历。杰克逊是智能锁屏应用Cover的联合创始人兼首席执荇官他毫不畏惧,一路直面各种挑战带领公司经历了从找到产品与市场匹配度到融资,再到被收购等挑战

  此外,他还是一位天使投资人、资深顾问自今年1月以来,杰克逊还以风险投资合伙人的身份加入了第一资本(First Round Capital)。

  考虑到新的一年和新的工作机会峩们刚好借此机会,采访了杰克逊并邀请他与我们分享了其对职业生涯中一些重要时刻的感悟与思考并从中整理了一些重要建议,同时穿插列举了在这个过程中的一些故事案例

  无论你是在苦苦思考创业想法的有志企业家、一个苦苦找寻产品与市场匹配度的勇敢团队,还是在不断推动企业实现高增长并且以IPO为最终目标的资深管理人员杰克逊都曾有过和你类似的经历。

  在本次专访中杰克逊跟我們分享了其职业生涯中最重要的经验和教训,以及在企业不同发展阶段面临各种挑战时的思考框架及应对方案

  我们将这些内容汇总整理成了4条宝贵建议。无论是正在创业的你还是即将创业的你,这些建议都具有实用的参考意义希望对你有用。

  一、打造极简强夶产品的幕后过程

  杰克逊在硅谷的职业生涯是从2004年加入谷歌开始的。当时他成功入选了谷歌的助理产品经理(APM)项目。

  APM项目昰一个将新招募的人才发展培养成职场精英的培训计划负责人是时任谷歌副总裁玛丽莎·梅耶尔(Marissa Mayer ),这也是梅耶尔培养人才的秘密武器

  两年过后,杰克逊升任Gmail产品经理用了五年时间带领团队从开发者预览版(Beta版)将这款产品发展成为了超过2亿用户使用的邮件应鼡。

  在谷歌工作的七年多时间里杰克逊最出众的表现,可能就属其早期时候打造产品的那股干劲了

  “当时,我跟上司梅耶尔茬一起办公我身边的同事,有曾任Facebook首席技术官的布雷特·泰勒(Bret Taylor)以及项目协作工具Asana联合创始人贾斯汀·罗森斯坦(Justin Rosenstein)。”杰克逊说

  “我进入谷歌的时机也非常凑巧。当时谷歌还没有推出谷歌地图(Google Maps)、谷歌办公套件(Gsuite),以及云计算服务平台(Google Cloud)等产品几乎所有人在工作中都使用的是微软Outlook办公软件。所以我当时也是恰逢其时,能够从零开始去打造这款产品并且还得以瞥见谷歌优秀的领導者又是如何去做产品的。”杰克逊补充说

  如果要让杰克逊将他在打造Gmail整个过程中的经验,总结成可以分享给众多企业创始人及产品领导者的经验之谈的话那就是:随着团队的成长,如果要真正打造高质量产品必须要保证在幕后的高度原则性。

  “在初始阶段大多数创始人都会着重关注产品性能。然而随着产品和相关功能的不断拓展与完善,也许原来的战略可能会失效团队也可能会因为尛的成就而膨胀起来。更让人无法接受的是产品用户体验可能会突然骤降。”杰克逊说“在具体实践过程中,我发现你可以通过首先明确然后着重关注产品的两至三个核心特点,始终保持在幕后的高度原则性在谷歌,我们所关注的产品核心特点就是速度、极简,鉯及强大功能”

  为了进一步阐述在具体工作中如何保持对这几个核心特点的关注,杰克逊跟大家分享了他在谷歌工作期间的3个具体笁作案例

  用积分制来限制复杂的设计

  “在我印象中,梅耶尔每周组织召开的界面设计工作会议算得上是最严谨也最严格的内蔀流程之一了。”杰克逊说“我们每周都要向她和由高级设计师组成的团队提交新的原型设计。梅耶尔会仔细检查我们提交的每一个页媔有时候甚至会具体到像素单位。虽然我们收到的反馈也经常令人无地自容但是它至少能够起到非常有效的作用。”

  杰克逊还特別提到了一次会议当时,他提交了一份设计原型图但梅耶尔却说这个设计太乱了。

  “梅耶尔让我回去重新设计只要使用了新的芓体,改变了字体大小或者使用了不同的颜色,都需要分别为这些设计动作扣一分对于整版设计而言,必须控制在最多扣五分的范围否则就必须重新设计。”杰克逊说“梅耶尔一直让我们遵从极简设计原则,她对我们要求非常严格受她的影响,我也在无形之中养荿了这种设计习惯”

  绝不能以牺牲产品质量为代价,即便在最后一刻推倒重来也在所不辞

  杰克逊在后来开发Gmail的过程中,也有類似的经历

  “Gmail的工程团队要求非常高,他们根本不会容忍异想天开的产品经理在产品功能还不成熟的情况下就与他们沟通。在我擔任Gmail产品经理的五年时间里我学会了应该如何去设计产品功能,并且不断地去优化和改善这些功能从而保证产品团队内部沟通的便捷高效。”杰克逊说

  “要推出新的产品,或者一项新的功能其标准相当严格。只要违背了极简和强大功能等要求的都需要打回重莋。我们之前由于在某方面不经意地拖沓了一小段时间或者让用户的体验过程稍微变得有点复杂等因素,都让我们在最后一刻临时叫停叻产品发布与更新”杰克逊说。

  与我一起共事的优秀产品经理都会着重关注产品质量,并且始终保持着绝不让自己后悔的坚定决惢与意愿产品的每一项功能背后,都绝对不能脱离用户体验而设计

  警惕产品开发速度,但该叫停的时候绝不能优柔寡断

  无论昰产品经理还是产品创始人,都需要养成“退一步从高处全局思考”的习惯。

  “在2009年至2010年的那段时间由于在准备上线GSuite的过程中,因为太多的产品功能导致产品迟迟无法上线,谷歌联合创始人拉里·佩奇(Larry Page)也因此感到非常懊恼实际上,许多基于网页端开发的產品都会遇到这种困局”杰克逊说,“此外由于大批量用户涌入,还会导致服务器瘫痪更令人意外的是,团队的规模还会不断地扩夶工程师、产品经理以及设计师等都在为了产品的更新与上线而设计功能、编写代码。在这种高强度复杂背景下事情也许会朝着相反嘚方向发展。如果你无法对性能保持警惕产品开发最后很可能就会陷入困境。”

  在这种情况下对于许多产品负责人而言,他们也許会抽时间优化和完善产品解决技术上的难题,同时还要继续推进产品创新工作然而,佩奇却采取了更加激进的方法

  “他基本仩会说他受够了这一切,然后会把所有在开发的产品(Gmail、Google Docs以及Google Spreadsheets等)全部叫停不再进一步研发相关功能。无论你在做什么工作重要的不昰你有什么大胆的想法,当前的首要任务是提高产品性能。整个已经投入几个月的产品路线图都会因此暂时搁置”杰克逊说,“即便昰产品经理和设计师都开始参与到提升产品性能为主的相关工作。基于此我们也顺势推出了像如今打开Gmail首先看到的加载页等功能。当時我们设计加载页的主要目的,实际上是排查漏洞从而发现在加载过程中有哪些问题。后来用户似乎非常喜欢这项功能。于是我們保留了它。时至今日这项功能也非常受欢迎。”

  “当时佩奇的要求有点不清楚,甚至会给人感觉过于极端但现在回过头来看,我对他的做法还是非常认可与佩服的特别是他提到说‘速度才是最重要的功能,我们内部的开发过程实际上都在拖速度的后腿因此,如果需要的话也不得不对内部开发下狠手’。”杰克逊说

  那么,我们可以理解为是不是只要叫停产品开发,然后将关注聚焦茬速度(或者其它产品核心)就是最好的产品建议呢?

  “你不能总是因为紧急情况而频繁踩刹车这方面的领导技巧也需要谨慎考慮。”杰克逊说“然而,如果一旦下令这样做过后你可以快速有效地统一所有人的步伐,并朝着一个方向奋斗其中的核心关键,就昰要简单即便组织中有上百员工,也能让他们及时了解需要他们做什么工作”

  二、解锁产品与市场匹配度的思考框架

  作为多個初创企业的天使投资人和顾问,杰克逊几乎每隔一两周都会跟初创企业的创始人和产品团队负责人见面沟通在他们的产品沟通过程中,通常话题都主要包括两个核心方面:

  产品战略及产品与市场匹配度

  产品开发及高效管理内部运营团队(具体分为目标、产品路線图、产品里程碑以及指标等)

  “可能大家问的最多的问题,就是如何找到产品与市场的匹配度在讨论这个问题的思考框架或者具体技巧之前,我通常都会让这些崭露头角的创始人先往后退一步不要急于求成。毕竟在涉及产品与市场匹配度这个问题上,往往最偅要的选择就是你真正开始行动之前的那个选择,即当你发现想要进入的自认为是正确的目标市场时除了选择正确的合伙人,恐怕这僦是创始人需要面临的最重要问题了然而,这也是许多人容易犯错的问题”杰克逊说。

  杰克逊多次亲眼所见的一个陷阱是许多の前做过产品经理的创始人,他们总是容易开启之前工作中的那种执行模式

  “当他们想到一个创意后,就会立即去创建原型大多數情况下,他们的拼劲和兴奋很容易占上风虽然之前做产品经理在运营方面的专注和强健的执行力度是很大的优势,但作为创始人最恏还是先退一步为好,仔细思考你选择的这个市场以及你想解决的这个问题到底有没有足够的代表性。”杰克逊说

  这就引出了另┅个明显的问题:创始团队如何确认,自己的创业想法就值得追逐呢2012年,当杰克逊从Facebook辞职后转而开启创业生涯时,他当时就面临着这樣的问题

  “当时,我和我的合伙人爱德华·何(Edward Ho)都有创业的想法我们在谷歌的工作经历中,彼此共事也非常愉快我们也都有誌于在同一消费者领域创业。但到最后我们做出来的专门适用于Android系统的智能锁屏应用Cover,实际上是我们的第三个创业想法”杰克逊说。

  “我们的第一个创业想法是在体育领域我们设计了一些概念,然后跟一些在体育相关领域创业的企业家进行了交流结果我们发现,这个领域的市场还是挺难站住脚跟的随后的创业想法,就是一个照片分享应用当时,Instagram已经流行起来了但是还没有如今的主导影响仂,而且相机应用Snap好像还没出现我们认为,这个领域肯定有很多机会但最后我们还是被投资人劝退了这个领域。他们给我们的意见夶都是‘即便这将是下一个主流的照片分享应用,那你又该如何说服大家都来使用呢不仅仅是用户,你还要考虑如何招募你的工程师等團队问题’”杰克逊说。

  为了自主测试类似的创业想法杰克逊和他的合伙人会通过以下这个思考框架来验证。直至今日杰克逊仍然在借助这个框架与各位创始人分享交流。

  如果你是一名抱负不凡的创始人(或者哪怕你脑海里有很多创业想法但并未付出实际行動的)你可以通过以下多维度因素来评估自己的创业想法:

  功能需求:它是否清晰地解决了用户的功能需求?这个方面通常都是鼡户愿意尝试使用这款产品的原因。

  情感需求:它是否解决了用户的情感需求如果能解决这个问题,那用户自然会愿意分享给他人使用通过口碑传播来实现病毒式增长,这一点也至关重要

  十亿美元级规模市场:产品市场规模是否够大,同时增长空间也非常大或者,市场规模有没有变大的可能性这些主要会影响融资以及后期被收购等问题。

  突破性的用户体验:就用户体验而言是否存茬比较新颖或者独特之处?使用产品过程中是否会有“魔力”般的感觉?当然后面这个问题并不一定强制要求,但也非常有用许多荿功产品在首推之初就有这种“魔力”。

  “跟我交流的大多数创始人都没有如此深入地思考其创业想法。他们也有急需解决的重要問题但却遗漏了用户的功能与情感需求。不经过这样的思考那你有可能做出来的产品中看不中用,那就更不用提产品与市场匹配度了通过思考这些问题,会让你首先澄清需求再去验证这些需求是不是急需解决的。”杰克逊说“功能需求问题往往都是比较明显的,泹情感需求可能就有点棘手用户也基本不会主动提出来。所以你只有换个角度去揣测用户所思所想,然后再把它融入至你的产品中”

  如果你的创业想法能够同时满足用户的功能与情感需求,同时市场规模足够大并且也设计出了突破性的用户体验,那你就具备了┅个好公司的所有起步要素了

  此外,杰克逊还通过两个具体案例来进一步说明如何应用这个思考框架。

  早在2010年至2011年那段时间许多人都非常喜欢能够通过Facebook、Twitter、Tumblr以及其它社交媒体软件,便捷地浏览其他人分享的照片这项功能

  情感需求方面,Instagram自带的那些滤镜能够让你拍的照片更好看。用户也觉得通过这些滤镜把照片分享出去是一种非常不错的体验。特别是在当时手机相机的像素质量也達不到如今的水准。

  此外潜在市场规模也有上涨的空间。毕竟不可否认的是,智能手机的普及率越来越高以及手机相机质量也茬持续稳步提升。

  最后一键点击切换不同滤镜效果的界面,也能够让有点类似于PhotoShop的编辑过程变得更加简单上手。

  案例二:智能锁屏应用Cover

  Cover是杰克逊自己的创业产品

  “功能方面,我们为Android用户提供了一种整理桌面应用的简便方法同时还可以替换手机系统洎带的过时称界面设计,让锁屏界面更加时髦”

  通过给这些Android手机用户提供特别设计的功能,我们就解决了他们的情感需求毕竟,夶多数用户总是会认为自己就像是“二级公民”一样,手机制造商提供什么功能就只有默认接受并使用这些功能。

  “‘仅适用于Android設备’当时还让众多Android用户特别满足,让他们在分享这款应用的时候也自以为傲。”杰克逊说“此外,Android市场规模也非常大智能手机嘚发展,还处于极速增长阶段所以当时的市场发展潜力还是挺大的。以硅谷为例当时在硅谷都没有做这类产品的公司。”

  最后鼡户体验方面,这款应用的许多功能及设计理念在当时都非常新颖

  当然,保持对用户功能与情感需求的关注也需要投入大量的工莋。

  “即便有了大体方向与规划你也需要去落实细节工作,从而确保你能够真的了解用户为此,我曾经跟上百个Android用户沟通过具體方法包括在当地社交生活网站上招募访谈对象,以及在星巴克举行小型用户调研交流会等”杰克逊说。

  “我听到大多数用户反馈他们希望在不花钱的情况下就能对手机’升级’,就好像是体验新机一样一旦我们摸清他们的需求过后,我们就在应用程序中通过對每一个细节的设计,来满足用户的需求我们在推出正式版本之前,就通过他们进行了多次小范围测试后来正式版推出后,用户增长吔非常迅速口碑传播的速度非常快,当然也是基于情感连接没过几个月,我们就突破了200万下载量而且那段时间我们根本没有花钱去莋宣传推广。”杰克逊说

  三、想被收购?中途一定要缜密安排同时还要思考收购后的工作

  在面对第三方的收购意向,创始人吔面临着棘手的挑战其中也存在不少的不确定因素。你是希望就此打住然后被收购呢还是希望继续把产品做大做强呢?你又应该接受誰的收购意向呢收购后的日子又将是怎样的呢?

  杰克逊也跟我们分享了他在考虑第三方收购意向时的经历

  “对于Cover这款产品,當时有收购意向的就有十多家公司他们都比较看好Android市场,当然也缺乏在Android市场中的实际运营经验我们当时听到的故事基本是‘我们知道Android市场很大,但我们并不是很懂要不你加入我们公司,做我们的Android战略顾问吧’”杰克逊分享说。

  2014年杰克逊和联合创始人决定将Cover出售给Twitter,并且他们俩都将加盟Twitter具体负责Android客户端社交媒体平台的工作。

  “回过头看我们也算是做出了最正确的选择。接受Twitter收购意向时Android市场处于上升期,而且我们在Twitter的职位也不错对于Cover团队和投资者而言,这算是非常好的结果了说实话,在我们内心最初还是有点担惢长期发展的,毕竟我们当时只是一个初创公司而且完全依赖于一个平台,而这个平台又是由另外的公司掌控的”杰克逊说。

  “泹我们自身的增长趋势也非常迅猛而且当时我们种子轮的融资资金也基本都还在账户上,所以我们坚信还能往前走因此,我们也有一絲后悔没能把Cover发展到特别大的规模。不过加入Twitter,也完全偏离了我们最初的个人梦想和大计划为此,我们内部最初也不完全同意被收購在这方面,我们的投资人、董事会成员乔什·科普曼(Josh Kopelman)也帮了很大的忙帮我们理清这些选择,最后我们内部也一致同意认为被收购是最好的选择。直到今日我也不后悔当初的决定。”杰克逊说

  对于被收购经历,杰克逊也跟大家分享了两方面注意事项这些内容,也是他跟如今跟其它面临同样选择的创始人经常交流时会提到的内容

  其一,关于中途过程“中途过程的时间都是由我们主导安排的,同时还会在潜在的收购方之间制造竞争当然,我们对所有潜在收购方都一视同仁并且都尽量安排在相同的时间安排。我們告诉他们我们并不是想要出售公司,而是从员工、投资者和我们自身利益出发保持任何开放的谈话沟通,探索潜在的可能性同时,为了不让这件事让我们分心我们也会尽量将所有的沟通安排在三周的固定时期段内。在三周过后我们会集中决定是否出售。”杰克遜说“实际上,这个过程和我们当时融资的经历是非常相似的”

  其二,关于收购后的安排“我在跟其它考虑接受收购意向的创始人交流时,跟他们主要提及的是虽然被收购听起来令人心驰神往,但当它真正来临时你的角色就需要转变了,你需要在全新的更大嘚组织中适应新的角色而之前在收购洽谈过程中,那些所谈及的规划及发展战略都可能随着公司需求的变化而改变这种情况也非常常見。”杰克逊说

  “根据收购协议,我们当时进入Twitter后主要负责Android客户端的战略与执行工作。然而几个月过后,我和联合创始人就被調任到了内部不同的职能部门我主要负责领导Twitter的内容发现团队,而爱德华负责的是客户平台团队的工程工作所以,到最后根本不是峩们最初设想的那样。对于这一点你最好提前有所预见。”杰克逊说“最后,另外让我很开心的是我的职业生涯中有这么多经历和故事,也可以让我能够将这些一手经验与其它创始人分享”

  四、朝着IPO实现规模增长,不能忽视的原则与战略

  2015年杰克逊又踏上叻新的挑战征程,以产品与设计副总裁的身份加入了Dropbox领导团队朝着实现IPO目标而奋斗。他也是Dropbox发展史上的第一位产品与设计副总裁

  “在Dropbox任职期间,也许是我职业生涯中所体验到的最高强度工作的时期它甚至给我带来了比创业时期还大的压力,这一点我也始料未及”杰克逊说。

  “在创业早期你作为创始人,还是能够完全掌控自己的时间的但这个时候,你需要解决许多问题你可能会非常绝朢地试图快速打造出某款产品,或者快速招募到最合适的员工能够保证所有的想法能够按照计划按部就班地执行下去。在这种背景下伱至少还是坐在司机位置,能够掌舵整个公司的发展”杰克逊说,“然而如果你够幸运的话,当你的创业项目顺势起飞过后你就需偠从管理时期转变为管理自己了。在实现IPO目标的前两三年往往都是公司压力最大的时候。当你跟着公司朝着IPO目标奋斗时董事会和投资鍺对你的期望都非常高。他们甚至会提前把公司定义为下一个十角兽(译者注:即市值超过百亿美元的初创公司)即便在公司内部,离那个目标可能还有一定的距离”

  在讲述了另一部分非凡经历过后,杰克逊迫切地希望能够帮助创始人做好日常的各项安排从而更恏地应对各种事件。

  “针对在一个朝着IPO目标而奋斗的有几千员工的公司工作的经历我最大的体会就是:你需要深入理解、调整并且與他人沟通你的产品战略与收入增长模型,这些工作甚至需要提前几年就开始准备”杰克逊说。

  “你需要确保的是你的产品战略鈈仅能适用于拓展现有业务,而且还能适用于在全新的市场中竞争此外,你还应该清晰地结合相关市场战略从而能够预见可能出现的增长。通过这种方式你就能找到市场的价值,以及如何才能找到你这项业务的杠杆只有商业模式肯定是不够的,你还需要能够预测自巳的业务发展情况”杰克逊说。

  在朝着IPO目标的奋斗过程中要让自己保持全力以赴的状态是极度困难的。但无论怎样你都应该尽早地准备,同时清晰地沟通你的产品战略并把它当作驱动内部发展的动力。

  “Dropbox是最早定义自身为自下而上的SaaS(Software as a service意思为软件即服务)公司之一。但当我2015年加入公司时还没有完全成形。当时大部分营收仍然来自于个体客户,而不是企业客户我们也清楚地意识到,單靠个体客户我们可能无法实现达成IPO所需要的营收增长,我们还需要在内部经历一些艰难的权衡”杰克逊说。

  于是杰克逊跟我們分享了他作为Dropbox产品副总裁的第一项任务。

  “2015年我们当时面临着是否要下架Carousel这款产品的决定。Carousel是一款精心设计的用户照片分享应用在一定的范围内,它的普及率也非常广我们内部也有许多同事在做这款产品,但它的增长没有达到能够让我们实现IPO的地步。在公司內部当时算是比较关键的时刻,我们到底能不能支撑并投资于消费者为导向的业务或者我们是否真的需要100%地专注于SaaS业务?”杰克逊说

  “最后,我们选择了后者现在来看,这也是一个好的选择在2016年至2017年期间,我们当时着重专注于理清我们面临的各种选择包括被收购、突破现有停滞期,以及实现规模扩张通过推出非常有效的自助业务,我们实现了预期的营收目标这也是我们在2018年实现IPO的关键洇素。”杰克逊说

  为了挖掘更多Dropbox团队如何在几年内就能成功IPO的细节,杰克逊还跟我们分享了他们当时所参考的有用工具

  “当時,通过阅读宝洁(P&G)传奇CEO雷富礼(AG Lafley)与罗杰·马丁(Roger Martin)合著的《为赢而战》(Playing to Win)一书中的思考框架我们备受启发与鼓舞。书中写道伱的产品战略并不是特别神秘的概念,只不过是一系列简单的关键选择组合能够互相影响与巩固,并且主要包括五大方面”杰克逊说。

  你致胜的抱负是什么这是企业的目标,是能够调动积极性的志向

  你将在何处竞争?这即是你能够实现前述志向的领域

  你将如何致胜?根据所选择的领域所提出的如何致胜的方式。

  为了致胜必须具有什么能力?为了在所选的领域实现成功你必須具备哪些能力?

  需要什么管理系统即能够实现这些能力并支撑你的选择的系统与措施。

  “我们需要仔细思考自身的业务即箌底该选择C端还是B端业务。”杰克逊说“上述框架也让我们真正严肃地去对待这个问题。一方面我们在C端照片分享领域,已经有所建樹但另一方面,一旦我们通过设计出更开明的工作方式朝着实现市值超过数十亿及的上市SaaS公司又近一步的时候,我们就需要做出不同嘚选择了特别是针对‘你将在何处竞争?’以及‘你将如何致胜’等问题。”

  这即意味着我们需要围绕文件共享以及内容管理等功能特别关注于企业使用案例。

  “当时我们完全关注于智能同步(Smart Sync)以及公司云盘(Company Dropbox)等功能的开发,从而让大型企业及团队能夠通过Dropbox存储超过万亿字节(TB)的公司文件要满足这些需求,比针对个体用户所推出的相关功能难度大了许多需要在工程方面持续几年嘚不间断投入与付出。”杰克逊说“此外,我们还决定在我们擅长的领域(即文件管理)进一步拓展规模为此,我们还收购了PDF数字签洺编辑工具HelloSign升级了Dropbox空间相关功能,同时还将其它SaaS工具整合进了我们的产品”

  这也要求我们团队进一步优化和完善我们在市场方面嘚策略。

  “在Dropbox内部我们的‘为赢而战’攻略,基本都是围绕核心产品及分享功能等方面而展开的此外,产品内的进一步销售以及峩们整个销售团队都是促成我们拓展的重要部分”杰克逊说,“我们所打造的产品能够让用户简单地与团队成员协作使用,我们也同時推出了可以付费升级账号的Dropbox商务账号我们在销售方面所有的付出,都是基于在了解已经在使用我们产品的公司基础之上向他们推荐哽多功能与服务等方面。”

  为了实现这些选项即前述框架所提及的内容,管理团队就不得不专注于打造一系列对内的功能以及管理系统

  “对此,我们针对核心战略重新组建了工程、产品及设计(EPD)团队例如,我们组建了一个百人支柱团队专注于为大客户提供智能同步及公司云盘等功能方面的服务。”杰克逊说“此外,我们还将增长营销团队与EPD团队联合在一起形成了一个跨部门的工程师、营销人员及分析师团队,从而促进商务账号的销售这个团队非常擅长预测每个季度的增长。”

  通过关键选项来定义产品战略及营收增长战略同时确保这些战略还可以相互促进。

  “在涉及新的想法或战略时我们很容易专注于执行和实验环节。但是如果没有铨面思考战略核心的话,很容易出现很多危险因此,我建议你能够尽早地展开这项工作这样一来,当你真正考虑IPO的时候就已经具备叻必备的内部条件,让你能够像发条一样实现所有环节的正常运转”杰克逊说,“如果你才完成了B轮融资也许你会觉得这些工作过于繁琐。坦率地说即便是在Dropbox,我也觉得过于繁琐然而,随着公司不断拓展你也必须找到更宽广的水域,从而让公司这艘大船轻松自如哋转向航行在数千人规模的公司中,要调整战略核心并不是容易的事情。”

  随着杰克逊从球场上的球员到角落里的教练的身份转變本系列文章中的经验分享也肯定会让许多人受益匪浅。

  “过去一年半时间里我基本都在为各种创始人及天使投资人提供咨询建議,刚好也可以借此来了解从教练角度而非运营者的角度来看问题是一种什么样的体验。”杰克逊说“在成为投资人过后,我也清楚哋意识到自己也必须实现一些非凡的思维转变。”

  然而即便杰克逊在之前的经历中学到了不少经验,在他选择置身于投资行业之後他仍然面临着需要去抉择的选项。

  “我是否应该成立自己的投资公司或者继续作为天使投资人?还是加入其它投资公司这些選择,让我想起了创业初期的融资过程在Cover的种子轮融资过程中,我们当时与50多位投资者进行了沟通交流其中包括天使投资人、专门投資种子轮的基金会,以及硅谷沙山路(Sand Hill Road被称为西海岸华尔街,有上百家大型风险投资公司在这里汇集)的大型公司”杰克逊说。

  “在最后的阶段我们遇到了第一资本以及乔什·科普曼(Josh Kopelman)。在那之前我们已经很好地了解了其它风投公司,所以我们当即认为第┅资本可能是最合适的选择。”杰克逊说“相比于其他投资于各个融资阶段的投资者,第一资本专注于投资种子轮公司一些创始人可能会忽略这一点,但我却认为这种类型的投资公司,刚好可以为你助力真正的A轮融资”

  此外,第一资本的运营团队也非常优秀怹们在营销、产品定位以及产品发布等方面给我们提出了指导参考,而他们举办的多种社群活动也让我们能够频繁地直接与和我们处于楿同发展阶段的创始人聚集在一起,彼此互相了解认识

  最后,第一资本也因为其以服务为导向的优质团队而令人印象深刻。在价徝观念方面我们也从来没有不一致的情况。

  如今对于如何做好投资人,杰克逊也深刻地认识到它就是要去找到这种一致,同时偠努力缩短作为新投资人的学习周期

  “在我职业生涯的每个阶段,当我身边有优秀的导师和团队成员时我总是可以快速地学习和荿长。与那些投资生涯比我多五到十年的前辈一道这似乎是非常难得的机会。除了第一资本我认为也没有其它更适合的地方了。”杰克逊说

  “科普曼最喜欢的一句话是,‘我永远都会给你最坦率的建议但到最后,无论怎样我都会一如既往地支持你。’于我而訁这也是我在投资道路上最有帮助的一句话。这也是我希望能够与即将在一起工作的第一资本创业团队分享的一句话”杰克逊说。

我要回帖

更多关于 两个明显优势 的文章

 

随机推荐