PHP头条
热点:

MySQL一派添“轻功”Drizzle+PHP抢先体验(1)


51CTO精选译文】Drizzle是从MySQL衍生出来的一个数据库服务器,相信只要你不是两耳不闻开源事,就应该已经对其有所了解了。Drizzle项目的宗旨是构建一个“更精练、更轻量、更快速”的MySQL版本,它的扩展性和易用性与MySQL相当,但为了提高性能和扩展性,它从原来的核心系统里移除了部分功能。

虽然Drizzle现在还只是个比较新的项目,但是它已经吸引了很多开源开发者,他们非常乐意为Drizzle作测试,提供代码,并在自己的项目里使用它。这也正是本文的目的所在。接下来,我将带你体验Drizzle,向你展示如何编译和安装它,如何创建一个Drizzle数据库,以及如何用PHP连接到这个数据库。下面就让我们开始吧。

不同之处

按照其官方网站上的说法,Drizzle是“一种为云和网络程序进行了特别优化的数据库,它是为在现代多CPU/多核架构上实现大规模并发而设计的。”它以GNU GPL v2许可证发布,项目带头人是MySQL的Brian Aker。

虽然Drizzle是MySQL的一个分支,但它的目的并不是要取代MySQL;相反,它的目的是吸引那一部分既想要MySQL的可靠性,ACID兼容性和易用性,又不需要存储过程、触发和视图这些MySQL新功能的用户。

在其它一些方面,Drizzle也有别于MySQL:

◆它的默认存储引擎是InnoDB,而不是MyISAM有关这两种引擎的优劣,可参考51CTO之前的文章浅谈MySQL存储引擎选择 InnoDB还是MyISAM以及InnoDB还是MyISAM 再谈MySQL存储引擎的选择

◆他所支持的数据类型比MySQL要少

◆它使用一套不同的客户机/服务器通信协议;

◆它提供了可扩展,插件化的架构,允许开发者只把需要的模块编译进去。和Apache、PHP很像。有关Drizzle扩展性方面的优势,51CTO之前的文章从memcached看MySQL和关系数据库的未来中也有所提及)

关于MySQL和Drizzle之间差异的更多信息可以参见 Michael "Monty" WideniusMySQL创始人,在今年5月宣布要建立开源数据库联盟)博客上与此相关的文章 ,以及 Drizzle FAQ 。

值得引起重视的一点是,Drizzle仍处在开发阶段,开发人员说他目前并不适于在生产环境使用。因此,如果要向你的老板或客户推荐数据库,目前还是应该用MySQL,PostgreSQL或SQLite。

An Apple A Day

Drizzle目前适用于Mac OS X,Linux和Solaris平台,需要GCC v4.1或以上版本支持;Windows平台暂时还没法使用Drizzle。首先,下载 Drizzle数据库服务器 drizzle)和 Drizzle协议库 libdrizzle ) 这二者的源代码,解压缩,然后编译并安装到你的系统中,如下:

  1. shell> tar -xzvf libdrizzle-0.3.tar.gz  
  2. shell> cd libdrizzle-0.3 
  3. shell> ./configure  
  4. shell> make  
  5. shell> make install  
  6.  
  7. shell> tar -xzvf drizzle-2009.06.1063.tar.gz  
  8. shell> cd drizzle-2009.06.1063 
  9. shell> ./configure --with-libprotobuf-prefix=/usr/local 
  10. shell> make  
  11. shell> make install  

本文使用Drizzlev2009.06.1063和libdrizzle v0.3 。

注意,Drizzle要用到 Google Protocol Buffers协议 ,因此,如果你还没有安装Google的这个协议, 那就还得下载并把它编译到系统里。在Protocol Buffers的网站上有它的源文件和详细的安装指南。本文使用v2.0.3版本的Protocol Buffers库,而不是更新一些的v2.1.0 ,以避免与pthreads有关的一个bug 。

默认情况下,Drizzle服务器将被安装在/ usr / local / sbin /drizzled目录,Drizzle客户端则是在/ usr / local / bin /drizzle。

安装完成后,就要为数据库服务器创建一个非特权组和用户,如下:

  1. shell> groupadd drizzle  
  2. shell> useradd -g drizzle drizzle 

另外还要创建一个目录以存放数据库文件,并给予适当的权限,如下:

  1. shell> mkdir /usr/local/drizzle  
  2. shell> mkdir /usr/local/drizzle/data  
  3. shell> cd /usr/local/drizzle  
  4. shell> chown -R drizzle .  
  5. shell> chgrp -R drizzle . 

然后,用以下命令启动Drizzle服务器:

  1. shell> /usr/local/sbin/drizzled --user=drizzle --basedir=/usr/local/drizzle/ --datadir=/usr/local/drizzle/data/ &  
  2. InnoDB: The InnoDB memory heap is disabled  
  3. InnoDB: Mutexes and rw_locks use GCC atomic builtins.  
  4. InnoDB: The first specified data file ./ibdata1 did not exist:  
  5. InnoDB: a new database to be created!  
  6. 090630 10:29:42  InnoDB: Setting file ./ibdata1 size to 10 MB  
  7. InnoDB: Database physically writes the file full: wait...  
  8. 090630 10:29:42  InnoDB: Log file ./ib_logfile0 did not exist: new to be created  
  9. InnoDB: Setting log file ./ib_logfile0 size to 5 MB  
  10. InnoDB: Database physically writes the file full: wait...  
  11. 090630 10:29:42  InnoDB: Log file ./ib_logfile1 did not exist: new to be created  
  12. InnoDB: Setting log file ./ib_logfile1 size to 5 MB  
  13. InnoDB: Database physically writes the file full: wait...  
  14. InnoDB: Doublewrite buffer not found: creating new  
  15. InnoDB: Doublewrite buffer created  
  16. InnoDB: Creating foreign key constraint system tables  
  17. InnoDB: Foreign key constraint system tables created  
  18. 090630 10:29:43 InnoDB Plugin 1.0.3 started; log sequence number 0 
  19. /usr/local/sbin/drizzled: ready for connections.  
  20. Version: '2009.06.1063'  socket: ''  port: 4427  Source distribution 

编译包的过程中也会生成一个和MySQL客户端非常类似的Drizzle客户端。按如下步骤启动它并进入Drizzle服务器:

  1. shell> /usr/local/bin/drizzle  
  2. Welcome to the Drizzle client..  Commands end with ; or \g.  
  3. Your Drizzle connection id is 24 
  4. Server version: 2009.06.1063 Source distribution  
  5. Type 'help;' or '\h' for help. Type '\c' to clear the buffer.  
  6.  
  7. drizzle>  

现在,你就可以向服务器发出SQL命令了,就像用MySQL客户端那样。

  1. drizzle> SELECT VERSION();  
  2. +--------------+  
  3. | VERSION()    |  
  4. +--------------+  
  5. 2009.06.1063 |  
  6. +--------------+  
  7. 1 row in set (0 sec)  

我们先创建一个数据库并添加一张表:

  1. drizzle> CREATE DATABASE test;  
  2. Query OK, 1 row affected (0 sec)  
  3.  
  4. drizzle> USE test;  
  5. Database changed  
  6.  
  7. drizzle> CREATE TABLE items (  
  8.     -> ItemID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,  
  9.     -> ItemDesc VARCHAR(255) NOT NULL,  
  10.     -> ItemQty INT NOT NULL  
  11.     -> );  
  12. Query OK, 0 rows affected (0.01 sec)  

据Drizzle FAQ所述,Drizzle支持TEXT, BLOB, VARCHAR, VARBINARY, TIMESTAMP, DATETIME, DATE, TIME, ENUM, INT, DOUBLE以及DECIMAL 这些字段类型。通过MySQL,你可能已经对这其中的许多了如指掌了 

下面通过向表中填充一些记录来继续我们的示例演示:

  1. drizzle> INSERT INTO items (ItemDesc, ItemQty) VALUES ('Bacon'4);  
  2. Query OK, 1 row affected (0 sec)  
  3.  
  4. drizzle> INSERT INTO items (ItemDesc, ItemQty) VALUES ('Eggs'3);  
  5. Query OK, 1 row affected (0 sec)  
  6.  
  7. drizzle> INSERT INTO items (ItemDesc, ItemQty) VALUES ('Milk'1);  
  8. Query OK, 1 row affected (0 sec)  
  9.  
  10. drizzle> INSERT INTO items (ItemDesc, ItemQty) VALUES ('Apples'6);  
  11. Query OK, 1 row affected (0.01 sec)  

简单运行一个SELECT语句看看是否一切正常:

  1. drizzle> SELECT * FROM items;  
  2. +--------+----------+---------+  
  3. | ItemID | ItemDesc | ItemQty |  
  4. +--------+----------+---------+  
  5. |      1 | Bacon    |       4 |  
  6. |      2 | Eggs     |       3 |  
  7. |      3 | Milk     |       1 |  
  8. |      4 | Apples   |       6 |  
  9. +--------+----------+---------+  
  10. rows in set (0 sec) 

下一步,我们就要使用PHP来做同样的事了!


www.phpzy.comtrue/php/17609.htmlTechArticleMySQL一派添“轻功”Drizzle+PHP抢先体验(1) 51CTO精选译文】Drizzle是从MySQL衍生出来的一个数据库服务器,相信只要你不是两耳不闻开源事,就应该已经对其有所了解了。Drizzle项目的宗旨是...

相关文章

PHP之友评论

今天推荐