Tag Archives: MySQL

MySQL 大企业级应用可行性分析(之四)

如果你觉得 MySQL 不够好,那是因为你不会用。

这是以前开了头的一个话题,现在有了一点新的想法和变化,倒是可以记录一下和大家分享。

数据仓库解决方案

一般来说,一个企业随着不断快速发展,或许在数据库上的投入到后期反而不如数据仓库、商业智能上面的投入。在数据仓库解决方案上,MySQL + InfoBright (参考)是个不错的解决方案。在数据仓库亦或是海量数据处理方面,倒是有几个基于 PostgreSQL 的解决方案,其中之一就是 GreenPlum ,最近一段时间受到很多人的关注。但是总体来说,这些方案的成熟度还有待于时间的考验。

站内数据搜索友好–全文搜索引擎

这里的站内搜索友好是说数据库是否更利于技术人员开发站内搜索技术。MySQL 在这个方面还是可圈可点,因为借助于 Sphinx 之类的开源全文搜索引擎,很方便的就能搭建一个可用的站内搜索引擎,多快好省。对于 Oracle 或是 DB2 这样的产品来说,似乎没有特别好的搜索引擎。至少 Oracle 的全文搜索基本上没法开放给前台用户使用的。

MySQL 前途曲折

前两天,Oracle 面对漫天谣言悍然宣布将对 SPARC 平台和 Solaris 投入重金研发,但只字未提 MySQL ,这无疑会让人怀疑 MySQL 在 Oracle 内部是不受待见的。Oracle 会把 MySQL 剥离出去么?让其变成自己的敌人? 唯一能让我放心的是 MySQL 不会死去,毕竟有那么多的克隆已经在蓬勃发展了。

这个系列的话题,我只提供陈述,选择由你来决定。

EOF

《MySQL性能调优与架构设计》推荐序

阿里巴巴 DBA 团队 简朝阳的大作《MySQL性能调优与架构设计》已经开始正式上市。我刚认识朝阳同学的时候,他还刚刚毕业,短短两三年后,已经能够独当一面,应该说阿里 DBA 团队是个很锻炼人的地方,当然重要的是他的刻苦钻研的劲头儿。早早就看过他的初稿,这本书是他倾力之作,有理由大力推荐。下文是我前一段时间写的推荐序。

拥抱MySQL数据库技术

MySQL_Tuning.jpg时至今日,恐怕已经没有人再把 MySQL 当成一个玩具性质的软件产品,即使是数据库市场执牛耳者如Oracle公司也不得不正式面对来自MySQL的冲击。如果说几年前,还有人对使用MySQL 有所疑虑么? 经过几年来互联网的高速发展,无数大型网站用其成功案例证明,以MySQL为基础的数据层解决方案已经成为互联网应用不可或缺的一个重要组成部分。

当下也是数据库技术应用处于激烈变革的时期。这并不是说传统的关系数据库技术在这两年有了多大的新突破,而是用户的需求在迅速变化。更多时候,用户不再需要单一的软件产品,而是灵活、高效、可靠、可控、低廉的解决方案。很多大型站点甚至根据自己的需求来改进 MySQL,进而回馈给开源社区,这也是开放的魅力所在,对于传统的商业数据库软件商来说,这是不可想象的事情。

MySQL早已不再是单一的数据库软件,以其为基础发展起来的各种开源组件令人目不暇接,而用这些组件构成的解决方案也是层出不穷。如何能够把以 MySQL为核心的这一系列软件充分运用,构建大型可扩展性网站,正是不少LAMP架构体系的网站开发者乃至架构师一直关心的问题。现在中文图书市场上 MySQL相关的书籍并不在少数,但放眼看去,绝大多数是教程类的内容,这本《MySQL性能调优与架构设计》则主要着眼于性能架构这两个当下大家更为关注的话题,结合作者几年来的实战经验与研究心得,相信能让不少网站少走弯路。

期待这本书让更多人受益。如果读者朋友们也能把自己的心得分享出来,那是再好不过的事情了。经常有即将毕业的学生以及网络上的朋友给我发来邮件,表示对数据库技术有兴趣,但是不知道如何切入,我的建议是,从学习MySQL开始吧!

EOF

此文作者:, 位于 Database 分类 标签: , on .
转载须以超链接形式标明文章原始出处和作者信息及版权声明.

日落西山 – Oracle 收购 Sun

真是一种嘲讽,就在刚才,收到一封广告信,标题是 "Sun为企业发展提供更多动力"

对于 IT 产业来说,这是最好的时代,这是最坏的时代。Sun 要做 Web 2.0 中的这个 Dot 没做成,74 亿美金把自己卖掉了。

zot_sun_s_oracle_b.gif

尽管我不是 Sun 的粉丝,还是感觉不太痛快。这次收购意味着又有若干产品有可能被打入冷宫。而大家比较关心的 MySQL 可谓命运不济,被 Sun 折腾一年多,在开源社区里面一点好没讨到,这回在 Oracle 新的产品线里面如何定位呢? will be an addition to Oracle’s existing suite of database products… 当然,InnoDB 这回和 MySQL 算是破镜重圆了。是否有其它变数,比如被原 MySQL 团队赎身出来? 难!

对于 Oracle 来说,这次自己终于有了硬件(SPARC)和操作系统(Solaris)这两块王牌,其实 Oracle 和 Sun 算是多年的合作伙伴了(超过 25 年),相信整合起来可能问题不大。这次收购比较失败的可能就是 IBM 了,Oracle 这次给了竞争对手 IBM 以更大的压力。难道蓝色巨人出不起这个价格麽? 还是觉得足够鸡肋? Sun 手里的 Java 技术对于 IBM 的小型机是个很好的补充,想不通。再过几年,这可能就是 IBM 犯过的最大错误。

不痛快的除了 IBM ,恐怕还有 RedHat。不过别着急,没准儿哪天 Oracle 也把 RedHat 也一并收了,我相信 RedHat 手里的 JBoss 至少让 Oracle 眼馋不已。有 JBoss 在,其他中间件就不可能赚到更多。

一切皆有可能。其他事情不好确定,但有件事情还是能基本肯定,拉里·埃里森大叔这回又有机会体验一下世界首富的滋味了…

EOF
延伸阅读:

FriendFeed 使用 MySQL 的经验

一直比较好奇 FriendFeed 网站背后的技术信息。Bret Taylor 的一篇 How FriendFeed uses MySQL to store schema-less data 给出了不少有价值的经验。

概览

FriendFeed 用 MySQL 存储绝大部分数据,超过 2.5 亿条记录。对待网站功能的态度: 让既有功能满足更多用户而不是添加更多的功能。

少添加新功能的好处是数据库 Schema 变化更小。在数据库Sharding 的情况下,如果修改 Schema 结构,必然会影响可用性。此外,几乎不进行复杂一点的关系型查询(比如 不做 JOIN 操作 — 这要用到传统意义上的索引机制 )。FriendFeed 也没有采用什么更新的数据库解决方案(比如 CouchDB ),原因无他,对 MySQL 更谙熟,知道其短长,扬长避短同样能发挥更大的作用。

Schema-Less

这是 FriendFeed 对付数据库的基本策略。只存储基本的对象属性,如果需要修改 Schema 层面的东西,只需要存储新的属性即可。其实就是更加”面向对象”,由基本的「元数据」一步一步衍生到所有的数据对象。

坚持「去索引化」,因为维护索引带来了复杂度,将索引数据存储到到表上。我认为这也是反范式的一个新的思路。在 Bret Taylor 文章的 「Details」 一节中给出了具体的例子。比如要在 user_id 上进行索引,那么创建 index_user_id 表(存储来自所有 Shard 的数据),以 user_id 和 entity_id 为主键即可。这样在修改基表的时候,不需要对其他「索引」表做变动。而删除「索引」也极为方便–删除创建的「索引表」即可。

一致性与原子性

关于一致性可能会有问题,但是可以确定基本原则:

  • 主条目表中存储的属性数据是规范的
  • 索引可能不对应实际的值(这和关系数据库本身的索引有些不同之处)

写入数据的时候按照如下顺序:

  • 写入条目表用 InnoDB 的 ACID 属性来保证
  • 把数据写入到其他 Shard 上的索引表中(猜测可能还是要延迟写)

在读取的时候可能会有短暂的数据不一致性的现象,但很快就能校正。考虑到 FriendFeed 业务的容忍性,这个问题并不严重。

笔记总结

总体感觉,FriendFeed 用了一种非常巧妙的方式进行数据库扩展(多耗费了一点存储空间)。不过这个方式总体上看来,极大减少了手工维护成本。相信 FriendFeed 分享的这个经验能给国内一些需要处理即时信息的站点一些启发。以上只是我的个人理解,如果去看一下 Bret 文章后面的留言,你肯定能得到更多信息(比如为何使用 UUID )。

最后提一下,FriendFeed 用 pickle 做 Python 的对象序列化。当然 Memcached 也是居家旅行必备佳品。

EOF