2008年数据库技术领域掠影

此为《程序员》杂志投稿。应该刊登在 2009 年第二期。

“预测”不是件容易的事儿,”回顾”就好操作的多。2008 年发生了很多大事,相比之下,数据库技术领域的这些事儿多少有些微不足道。

0) Sun 收购 MySQL

2008 年初第一笔业界大并购,在上一波.com 大潮中 Sun 赚得盆满钵满,在这一波 Web 2.0 大潮中,Sun 还要做 Web 2.0 中的这个”点”(Dot)? 我个人对此并不看好

这是今年数据库领域的最大的事件,但也仅此而已,一年下来,MySQL 联合创始人 David Axmark 都因为”痛恨每天都要遵守的各种制度”从而离开了 Sun ,而到目前为止也没看到 Sun 针对 MySQL有什么新东西拿出来,倒是狂推预装了各项软件的硬件盒子。前不久发布的 MySQL 5.1 GA 质量更无法让人满意,很多 MySQL 旧将纷纷抱怨,连著名的 MySQL Performance Blog 也不失时机的抛出”MySQL 质量将不再如昔“的论断,大浇冷水。

1) Amazon 推出 SimpleDB

云计算喊了一整年, Amazon 也没闲着,不停地推出新服务。SimpleDB 服务让Jeff Bezos 把手伸向数据库服务,现在仍看不到该服务有大行其道的趋势,但是”提供数据索引与查询的核心数据库功能的 Web 服务” 无疑会逐渐吸引更多潜在的用户。到了年底,Amazon 干脆打出了在一段时间内 SimpleDB 免费的服务来招徕用户,用心良苦。

最近若干分析家下了论断 “未来网络产业将仅剩亚马逊与 Google 两强相争”,的确,Amazon 的技术实力不容小视,在 2009 年相信有更多精彩。

2) 主流存储厂商试水 SSD

让人没料到的是 EMC 作为业界存储领头羊,会率先推出支持 固态硬盘(Solid-State Drives, SSD) 的存储设备,Sun 、HP 等厂商也都不甘落后,纷纷宣布将拥抱 SSD。确实,SSD 的某些特性表现是如此抢眼,很多 DBA 都等着它来解决或者缓解 I/O 问题呢,毕竟这是近年来能看到的最大的硬件领域的突破。”钱能解决的问题就不是技术问题”,可惜,目前光有钱,买回来的 SSD 可能还是解决不了问题。SSD 的可擦写次数问题仍然让很多用户心下狐疑。

相信2009 年会是 SSD 爆发的一年,主流存储厂商都会纷纷推出支持 SSD 的产品。假以时日,SSD 应该不负众望。

3) Oracle 联手 HP 进军硬件领域

今年 Oracle 整体在 DB 方面实在没什么亮点,如果非要说有,那么在 Open World 上亮相的 Exadata Storage Server 倒是值得一提。

微软和 IBM 这一年来尽管都有升级产品推出,但实际上也就是升级产品推出而已,仍看不出什么新生机。其实很多用户已经非常厌倦不停地增加新功能的软件新版本,每发布一个版本不失时机的宣布打破什么 TPC-C 记录之类的事情已经难以引起用户兴奋。如何在廉价硬件上实现大规模平滑扩展是所有的数据库厂商必须要面对的问题。

4)面向列存储的数据库技术

面向列的数据库(Column-Oriented Database)这不是什么新技术,但是非常适合某些数据分析或者统计类的应用需求。常见的RDBMS 都是面向行(Row-Oriented Database)存储的,在对某一列汇总计算的时候几乎不可避免的要进行额外的 I/O 寻址扫描,而面向列存储的DB 能够连续进行 I/O 操作,减少了 I/O 开销,从而达到数量级上的性能提升。

其实在 Google BigTable / Hadoop HBase 中很早就看到这一思想的运用,在过去这一年中,列存储数据库也更多的引起了重视。

5) GreenPlum= MapReduce + SQL

MapReduce ,让很多面向数据分析的 DBA 还是挺眼馋的,GreenPlum 的出现把 MapReduce 和 SQL 有机的衔接起来,给海量数据分析能力带来了新的可能。年末的时候, GreenPlum 又宣布进军中国市场,不知道用户实际接受程度如何。

顺便说一下,GreenPlum 背后的大东家是 Sun。

6) 从 Drizzle 到 Percona XtraDB 存储引擎

MySQL 的生命力不在大公司手中,而是来自开源技术、Web 2.0 网站的需求上。Drizzle 这个”精简 MySQL” 版本的出现多少证明了这一点。Percona XtraDB 存储引擎的推出也值得 MySQL DBA 惊喜。

除此之外,DRBD、MySQL Proxy 与 Memcached 等 MySQL 相关组件的灵活搭配与定制,给用户解决超大规模应用上带来了更大的可能。数据库市场不可能不受经济危机的影响,商业数据库厂商日子要吃紧是可以想见的事情。

7)Hadoop 的生命力

Yahoo! 公司在 2008 年表现不佳,但是 Yahoo! 支持的 Hadoop 项目可是左右逢源,再一次让我们认识到开放带来的生命力。Facebook、Amazon、AOL、阿里巴巴等公司(当然也包括 Yahoo!)都在纷纷构建 Hadoop 集群来解决大规模数据处理与分析问题!。期待在 2009 年 Doug Cutting,这位 Hadoop 项目的带头人不要被 Google 挖角。

N)2009 年会怎么样? 谁知道呢。

EOF

后记:这算是 2008 年末的时候数据库技术小观察吧。因为投稿的缘故,现在才发出来。在过去这短时间里,自己一些观点可能也有所变化。如有时间,再做补充或者修订。请注意该文的时效性。

补充:对于 SSD,最近一件重要的事件是 Steve Wozniak 加入了 SSD 厂商 Fusion-IO

SQLite数据库是中小站点CMS的最佳选择

作者:孙毓波 (AKCMS 作者)

SQLite 是一个类似Access的轻量级数据库系统,但是更小、更快、容量更大,并发更高。为什么说 SQLite 最适合做 CMS (内容管理系统)呢?并不是说其他数据库不好, Oracle、MySQL、SQLServer 也都是非常优秀的 DBS,只不过他们设计目标不同,特性不同,所以只有更适用某个应用场景,没有绝对的好坏之分。

我归纳的中小型站点的CMS的特点如下:

  • 1、数据量不超过10万
  • 2、日页面访问量不超过10万
  • 3、 一部分网站全部生成静态页面,一部分网站实时查询数据库动态访问
  • 4、 站长不懂技术,不懂得复杂的数据库维护,只会用 FTP 管理网站
  • 5 、个人站点基本上是一个人管理,一般情况下只有一个人在访问后台,没有并发
  • 6、 对数据库来说是读多写少,只有在站长访问后台的时候才会写入
  • 7、 多运行于虚拟主机,大部分PHP主机均同时支持MySQL,小部分PHP主机需要单独购买MySQL,PHP+MySQL的主机价格较PHP主机价格高。
    (以万网为例:最便宜的PHP空间780元,最便宜的PHP+MySQL的PHP空间1150元)
  • 8、 多数中小站点的HTTP服务与MySQL部署在同一服务器上

SQLite 的优点在中小网站CMS应用场景下表现突出:

  • 1、与MySQL相比,它更彻底的免费,并且没有任何使用上的限制
  • 2、非常小巧,PHP5以上版本中无需任何配置即可支持SQLite
  • 3、无需单独购买数据库服务,无服务器进程,配置成本为零
  • 4、整个数据库存储在一个单个的文件中,数据导入导出备份恢复都是复制文件,维护难度为零
  • 5、读速度快,在数据量不是很大的情况下速度较快,更重要的是:省掉了一次数据库远程链接没有复杂的权限验证,打开就能操作

SQLite的缺点在中小网站 CMS 应用场景下被规避:

  • 1、并发低 动态访问时当访问量不超过10万PV的时候,SQLite 超过 Access 的并发能力已经绰绰有余;生成静态页后更无需考虑数据库的并发问题
  • 2、在大数据量的情况下表现较差 但是中小站点一般情况下数据量不超过10万,而SQlite 在 100 万数据量之下表现还不错,因为省掉了对数据库服务器的远程连接甚至会更快
  • 3、写入较慢 默认配置下的 SQlite 的写入速度比MySQL慢了很多,但是 CMS 应用场景的写入操作较少。在插入新文章的时候基本感受不到慢。集中的写数据库操作只有在安装的时候会出现,不过只出现一次,可以忽略
  • 4、为已有的表加索引较慢 但是在中小站点CMS中不会有这样的需求,可以忽略
  • 5、无法将 MySQL 部署到与前端机不同的服务器上,但是中小站点也没有分开部署的需求

综上所述:在中小站点 CMS 的应用场景下 SQLite 能最大限度的降低建站成本,降低维护难度,又很好得规避了自身的缺点。所以我认为未来支持 SQLite 的 CMS 系统一定会大行其道。

EOF


Fenng 注:这是网友来稿,转载请注明本文作者。刊载此文不代表我赞同文中所有观点。其实,我觉得 Berkeley DB 或许也不错。另外,如果一个 CMS 日访问量小于 10 万,通过一些 Web 前端优化,后端的压力就会非常之小。

专访 Amoeba 项目开发者陈思儒

老文。去年受泰稳之托做的采访。这是我整理的稿件。另请参见 InfoQ 中文站上关于 此文的更多信息

可能 MySQL Proxy 很多数据库技术人员都比较熟悉了,在前不久,国内也有开发者发布了一个Amoeba(变形虫)项目(http://sourceforge.net/projects/amoeba),这个项目专注分布式数据库 Proxy 开发,引起了广泛的关注。 DBA notes( https://www.dbanotes.net ) 站长Fenng 有幸采访了阿米巴项目的开发者陈思儒,以下是采访全文。

Fenng:你好,思儒,很高兴能接受采访,简要介绍一下自己吧?
陈思儒: 我目前是盛大计算机(上海)有限公司的一位高级研究员。 在就业生涯中从事分布式消息系统、分布式应用、多层框架设计、规则引擎开发框架研究,以及 Java 2D MMORPG框架研究。

Fenng: 说一下当初开发 Amoeba 项目的缘由如何,估计其中也会有不少小故事吧? 我可是非常好奇。
陈思儒: 其实 Amoeba 的前身是网络数据包分析代理,之所以 Amoeba 能够快速稳定发展也是因为个人在前期使用这些技术分析过一些游戏的数据包(这儿不方便透露一些细节,这些都只是个人爱好而已,并没有破坏那些被我研究过的游戏 :D )。

为什么会有 Amoeba 这个产品,这个话题的确非常有意思,我关注 MySQL Proxy 也有一段时间了。MySQL Proxy 的这种想法做的非常棒,它能够根据自己的想法去构造目标的 MySQL Proxy 应用,比如监控 SQL 执行、数据流量、读写分离。但由于我们使用 MySQL Proxy 并不能非常轻易的解决一些问题(读写分离、数据切分、水平切分、负载均衡),而是需要写大量的Lua Script,这些 Lua 并不是现成的而是自己需要去写。这个工作对于并不熟悉 MySQL Proxy 内置变量、MySQL Protocol 来说是非常困难的。

因此带着这个想法我就设想做一个非常容易使用、可移植性非常强的软件。Amoeba就因此诞生了。为什么叫Amoeba? 其实这个想法我是突然想到的,Amoeba中文意思是”变形虫”,Amoeba被设想为数据库代理的开发框架,它可以为符合Amoeba框架的任何数据库开发代理层。因此也比较象”变形虫”一样能够变成目标数据库的代理层软件。

Fenng: 我观察到 Amoeba 与 Oracle 交互的时候似乎还是模拟 MySQL 的驱动器, 实际情况是否如此?
陈思儒:目前Amoeba有2个产品:Amoeba for MySQL,Amoeba for Aladdin 。这2个产品有不同的适用范围:

  • Amoeba for MySQL:被代理的只有MySQL数据库,需要分析 MySQL网络协议,它的代价比Aladdin会小很多,而且性能也较高;
  • Amoeba for Aladdin:被代理的可以是目前提供Jdbc driver的所有数据库,这些数据库可以同时并存于Amoeba for Aladdin后端。

其实在我上一家公司的时候也正在研发 Amoeba for Oracle,这个产品目前还正在研发状态。这个产品性能也跟 Amoeba for MySQL 一样出色。

就 Amoeba for Aladdin 产品来说,后端的任何数据与 Aladdin 交互采用 JDBC Driver. 对于 Aladdin来说,数据库的协议是透明的,而应用跟 Aladdin 的交互则采用 MySQL 协议,这个做法很多人有不明白,其实做这个决定主要是想借助 MySQL 使用的广泛程度以及对各种 开发语言的支持。因此对前端的应用来说 Aladdin 就是一个虚拟的 MySQL 数据库。你这个问题应该是问使用 Aladdin 的时候。

Fenng: 是的,是在看了你的 Aladdin 架构图后产生的疑惑。你比我严谨多了(笑)。能否冒昧问一下 Amoeba 项目当前的局限?
陈思儒:虽然 Amoeba 能够很好的解决水平切分、垂直切分等,但还是会存在一些局限性,这些局限性是因为我们在设计目标的数据库架构的时候就必须考虑到我们未来的数据库框架(可以线性扩容的数据库架构)。因此也有些查询将不支持,比如跨数据库服务器进行Join,我们要尽量避免类似的业务出现,也可以通过多次查询来解决这类问题。

Fenng: 你在前面也说到了 MySQL Proxy,能否简单的说说 Amoeba 与 MySQL Proxy的区别?
陈思儒:其实说与MySQL Proxy的区别应该是Amoeba for MySQL与 MySQL Proxy 的区别,在上面表述的第二点应该都涉及到了:

  • Amoeba只是目标数据库代理的开发框架。
  • Amoeba for Aladdin 是另外一个类似Amoeba for MySQL的产品。他们共同点是都可以做负载均衡(HA、ROUNDROBIN,WEIGHTBASED)、读写分离、数据切分(垂直、水平)、failOver。

Fenng: 据说你也分析过 Oracle 的 TNS 协议,你认为可靠性如何?
陈思儒:的确,我在上一家公司为做 Amoeba for Oracle 分析过 TNS协议,可靠性以及安全方面都是没什么问题,Oracle 还提供了一些网络层的性能参数,用来改变Oracle的网络吞吐量。但是 Oracle 的数据部封包做法让我和老同事在分析 Oracle 数据包的时候伤透脑筋, 我觉得 Oracle 如果想在协议上面升级版本将不是一件容易的事情。而MySQL 的协议封包的做法我比较赞同。

Fenng: 对于分析 TNS 的可行性,我的看法倒是和你类似。顺便问一下,现在 Amoeba 是否已经有了成功案例, 方便的话能否举几个?
陈思儒:Amoeba for MySQL 的成功案例,目前就网友直接跟我说的有几个,但我还没具体了解他们具体的公司名称,以后知道了我再透露。

Fenng: 到时候千万要通知我一下。对了,能否说一下 Amoeba 项目的愿景以及下一步的目标?
陈思儒:目前距离Amoeba发展目标还有一点距离,Amoeba 未来将是一个更加容易使用、可管理、可动态装载配置、Amoeba集群等。

如果未来可行的话,我将补充 MySQL 协议,做一个用于负载均衡的”重定向路由器”(类似F5功能,但它只是做连接跳转)。

Fenng: 现在开发者主要是你一个人? 是否还有其他维护者 ?
陈思儒:Amoeba 框架、Amoeba for MySQL、Amoeba for Aladdin 目前的开发就我一个人。

Fenng: 很高兴你接受我的采访。期待 Amoeba 项目取得更大的成就,也祝你工作愉快!
陈思儒:客气!也希望有更多的开源爱好者或是数据库技术爱好者加入到这个项目的开发中来。关于 Amoeba 项目的进展我会在 “Amoeba 开发者博客“上更新,欢迎订阅。

EOF

旧文重发,期待新的一年这个项目能有更大的发展,能有更多公司从该项目中受益。

春节快乐!

在这里给各位朋友以及各位读者顺路拜年啦!

新年快乐,身体健康,诸事和谐,万事如意!

收到了不少朋友的短信,短信内容不乏精彩之作,有豪放的,有婉约的,有古典的,有现代的,我这个人比较懒,就不一一回复了,心里有大家。提醒各位发短信别忘参考一下拜年短信指南

The_Road.jpg

2009 年的风景与道路…

EOF