
Введение
Если вы не очень далеки от мира СПО, то скорее всего вы уже слышали кое-что о Drizzle и в принципе можете перейти к следующему разделу, для тех кто впервые узнает об этой СУБД — немного вводной информации ниже.
Проект Drizzle нацелен на построение облегченной версии MySQL обестечивающей достаточный уровень стабильности и простоты использования, но некоторые возможности будут исключены с целью повышения производительности и масштабируемости. Проект еще очень молод, но уже широко известен в узких кругах разработчиков СПО, которые заинтересованы в экспериментах над этим продуктом, его развитии и внедрении в свои проекты. Из статьи вы узнаете как собрать и установить СУБД Drizzle и подключиться к ней с помощью PHP.
По словам с официального веб-сайта, Drizzle это «база данных оптимизированная для облачных вычислений и сетевых приложений… для массивной параллелизаии на системах с мультипроцессорной ахрхитектурой», распространяется под GNU GPL v2, и ведет все это дело Брайан Акер из MySQL.
Несмотря на то что, Drizzle отпочковался от MySQL, он не предназначен для замены MySQL, а, скорее, он разработан для пользователей, которые хотят иметь простой в использовании инструмент обладающий надежностью MySQL, обладает ACID свойствами и не используют некоторые из новых возможностей MySQL, такие как хранимые процедуры, триггеры и представления.
Также есть и некоторые другие отличается от MySQL:
- По умолчанию используется движок InnoDB вместо MyISAM;
- Поддерживается меньше типов данных, чем MySQL;
- Использует отличный от MySQL'евского клиент/серверный протокол;
- Поддерживает расширяемую архитектуру с поддержкой подключаемых модулей, что позволяет разработчикам собрать систему только с теми модулями, которые необходимы (по сути как Apache c PHP).
Важно отметить, что Drizzle все еще находится в стадии развития и сами разработчики заявляют, что код еще не пригоден для применения в реальных проектах, так что вы ищите что порекомендовать вашему боссу или клиенту, вам следует посмотреть в сторону MySQL, PostgreSQL или SQLite на данный момент.
Получение дистрибутива
Drizzle в настоящее время доступен для Mac OS X, Linux и Solaris Express платформ и требует GCC v4.1 или выше; Windows пока не поддерживается. Для начала скачайте архив исходных кодов:
- Сервер баз данных (drizzle)
- Библиотека протокола (libdrizzle)
Распакуйте их, скомпилируйте и установите их на вашей системе, как показано ниже:
> tar -xzvf libdrizzle-0.3.tar.gz
> cd libdrizzle-0.3
> ./configure
> make
> make install
> tar -xzvf drizzle-2009.06.1063.tar.gz
> cd drizzle-2009.06.1063
> ./configure --with-libprotobuf-prefix=/usr/local
> make
> make install
В статье будет рассматриваться Drizzle v2009.06.1063 с libdrizzle v0.3. Заметим, что Drizzle использует библиотеку Google Protocol Buffers, поэтому вероятно вам потребуется скачать и скомпилировать ее для вашей системы. подробные инструкции можно найти на сайте Protocol Buffers. В данной статье используется версия 2.0.3, а не более поздняя v2.1.0, чтобы избежать ошибку, связанную с pthreads.
По умолчанию, сервер Drizzle будет установлен в /usr/local/sbin/drizzled, а клиент в /usr/local/bin/drizzle, после установки создайте не привилегированную группу и пользователя для сервера как показано ниже:
shell> groupadd drizzle
shell> useradd -g drizzle drizzle
Так же нужно создать директорию для файлов базы и выдать соответствующие права:
> mkdir /usr/local/drizzle
> mkdir /usr/local/drizzle/data
> cd /usr/local/drizzle
> chown -R drizzle .
> chgrp -R drizzle .
После этих действий запускаем сервер Drizzle следующим образом:
> /usr/local/sbin/drizzled --user=drizzle --basedir=/usr/local/drizzle/ --datadir=/usr/local/drizzle/data/ &
InnoDB: The InnoDB memory heap is disabled
InnoDB: Mutexes and rw_locks use GCC atomic builtins.
InnoDB: The first specified data file ./ibdata1 did not exist:
InnoDB: a new database to be created!
090630 10:29:42 InnoDB: Setting file ./ibdata1 size to 10 MB
InnoDB: Database physically writes the file full: wait...
090630 10:29:42 InnoDB: Log file ./ib_logfile0 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile0 size to 5 MB
InnoDB: Database physically writes the file full: wait...
090630 10:29:42 InnoDB: Log file ./ib_logfile1 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile1 size to 5 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Doublewrite buffer not found: creating new
InnoDB: Doublewrite buffer created
InnoDB: Creating foreign key constraint system tables
InnoDB: Foreign key constraint system tables created
090630 10:29:43 InnoDB Plugin 1.0.3 started; log sequence number 0
/usr/local/sbin/drizzled: ready for connections.
Version: '2009.06.1063' socket: '' port: 4427 Source distribution
Клиент Drizzle очень похож на клиент MySQL:
> /usr/local/bin/drizzle
Welcome to the Drizzle client.. Commands end with ; or \g.
Your Drizzle connection id is 24
Server version: 2009.06.1063 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
drizzle>
Теперь вы можете выполнять SQL команды на сервере, так же, как и с MySQL.
drizzle> SELECT VERSION();
+--------------+
| VERSION() |
+--------------+
| 2009.06.1063 |
+--------------+
1 row in set (0 sec)
Создадим базу данных и добавим в нее таблицу:
drizzle> CREATE DATABASE test;
Query OK, 1 row affected (0 sec)
drizzle> USE test;
Database changed
drizzle> CREATE TABLE items (
-> ItemID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ItemDesc VARCHAR(255) NOT NULL,
-> ItemQty INT NOT NULL
-> );
Query OK, 0 rows affected (0.01 sec)
Согласно Drizzle FAQ, поддерживаются следующие типы данных TEXT, BLOB, VARCHAR, VARBINARY, TIMESTAMP, DATETIME, DATE, TIME, ENUM, INT, DOUBLE и DECIMAL. Продолжим создавать нашу базу данных добавив в таблицу следующие записи:
drizzle> INSERT INTO items (ItemDesc, ItemQty) VALUES ('Bacon', 4);
Query OK, 1 row affected (0 sec)
drizzle> INSERT INTO items (ItemDesc, ItemQty) VALUES ('Eggs', 3);
Query OK, 1 row affected (0 sec)
drizzle> INSERT INTO items (ItemDesc, ItemQty) VALUES ('Milk', 1);
Query OK, 1 row affected (0 sec)
drizzle> INSERT INTO items (ItemDesc, ItemQty) VALUES ('Apples', 6);
Query OK, 1 row affected (0.01 sec)
Проверим что все корректно добавилось выполнив SELECT:
drizzle> SELECT * FROM items;
+--------+----------+---------+
| ItemID | ItemDesc | ItemQty |
+--------+----------+---------+
| 1 | Bacon | 4 |
| 2 | Eggs | 3 |
| 3 | Milk | 1 |
| 4 | Apples | 6 |
+--------+----------+---------+
4 rows in set (0 sec)
Поддержка в PHP
Поддержка Drizzle в PHP осуществляется через соответствующее расширение PHP, которая обеспечивает полноценное API для доступа к базе данных. Это расширение в настоящее время поддерживается Эриком Дэй, Джеймсом Люэдке и некоторыми другими разработчиками, находится в свободном доступе в PECL по PHP лицензией. Несмотря на то, что расширение находится в стадии разработки, оно позволяет осуществлять большинство из общих задач, связанных с доступом и использованием данных из Drizzle внутри PHP приложений. Установить расширение из PECL можно следующим образом:
shell> pecl install drizzle-beta
Но в принципе можно собрать и из исходников:
shell> tar -xzvf drizzle-0.4.0.tar.gz
shell> cd drizzle-0.4.0
shell> phpize
shell> ./configure
shell> make
shell> make install
После этих действий, у вас должен появиться загружаемый модуль с названием drizzle.so в директории модулей PHP. Включите это расширение в php.ini, перезапустите Web-сервер и убедитесь в том, что расширение активно вызвав phpinfo():

P. S.
Это не полный перевод — в нем отсутствуют примеры применения, но те кому они интересны могут посмотреть их пока в оригинальной статье.