Статьи

GladiusDB и Firebird: базы данных для ваших приложений PHP

Добро пожаловать во вторую часть моей серии о базах данных для использования с PHP, о которой вы, возможно, не слышали В первой части мы создали сцену для этой серии и начали с изучения Berkeley DB , одной из ветеранских баз данных в мире открытого исходного кода. Мы рассмотрели, откуда он взялся, его основные характеристики и сильные стороны, а также какие типы приложений лучше всего использовать, заканчивая простым примером кода.

В следующей части мы рассмотрим две (возможно, очень контрастные) базы данных. Первая — это Gladius DB , которая представляет собой базу данных с плоскими файлами, написанную на чистом PHP. Вторым является Firebird , еще один ветеран баз данных, который имеет функции, аналогичные некоторым из наиболее известных баз данных, таких как Microsoft SQLServer.

Итак, давайте начнем.

Gladius DB
Gladius DB написана исключительно на PHP, использует плоские файлы для хранения своих файлов данных и совместима с подмножеством SQL92 . Для запуска не требуются внешние библиотеки или накопители, а также он может быть интегрирован с ADODB .

Для чего это хорошо?
Как мы увидим чуть ниже, Gladius DB подходит для самых разных приложений, независимо от того, хотите ли вы легкую и гибкую базу данных, с низкой затратами ресурсов или небольшим количеством встроенного программирования.

Поскольку он использует плоские файлы, существует возможность его использования либо на общем хосте, либо на многосерверной / облачной среде. Вы можете хранить файлы в локальной файловой системе, в APC, в memcache или в чем-то подобном, что также позволяет повысить производительность.

Как это использовать
Сначала загрузите библиотеку из ее дома на sourceforge.net . Затем убедитесь, что он входит в ваш PHP include-путь, или добавьте простой оператор set_include_path, как показано ниже, чтобы обеспечить его наличие.

// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__)));
 
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR,
    array(
        realpath(APPLICATION_PATH . '/gladius-0.8.1'),
        get_include_path(),
    ))
);

Как вы можете видеть, мы определили базовый APPLICATION_PATH для базы включения, а затем добавили Gladius. Я установил его на gladius-0.8.1, последний на момент написания статьи, но не нужно быть таким конкретным. На самом деле, это все, что вам нужно сделать.

Простой пример
В соответствии с традицией, начатой ​​в первой части серии, я включил простой пример, чтобы помочь вам начать использовать его. Сначала взгляните на приведенный ниже код, а затем давайте разберемся с ним.

<?php
 
error_reporting(E_ALL);
ini_set('display_errors', 'on');
 
define('DATABASE_DIRECTORIES', 'databases');
 
$GLADIUS_DB_ROOT = DATABASE_DIRECTORIES;
 
// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__)));
 
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR,
    array(
        realpath(APPLICATION_PATH . '/gladius-0.8.1'),
        get_include_path(),
    ))
);
 
include ('gladius-0.8.1/gladius.php');
 
$G = new Gladius();
 
$G->SetDBRoot(DATABASE_DIRECTORIES);
 
// call the database selection method
$G->SelectDB('myshop');
 
$sql = "INSERT INTO phonebook VALUES('Gabriele', 'D,Annunzio', '1000-0000')";
$G->Query($sql);
 
// show the result
echo $G->errstr;
 
$query = 'SELECT * FROM phonebook';
 
$rs = $G->Query($query);
 
// execute a SELECT statement and fetch all the rows
$rsa = $rs->GetArray();
 
print "<table cellpadding=5 cellspacing=2 border=1>";
 
// iterate through all rows
foreach ($rsa as $row) {
    $row = (object)$row;
    printf("<tr><td>Name: %s</td><td>Surname: %s</td><td>Phone: %s</td></tr>",
        $row->name,
        $row->surname,
        $row->phone
    );
}
 
print "</table>";

Сначала мы устанавливаем константу, DATABASE_DIRECTORIES, для каталога, в котором Gladius будет хранить файлы своей базы данных, а затем мы используем ее для установки константы Gladius, GLADIUS_DB_ROOT.

После этого мы включаем основной файл Gladius, создаем экземпляр объекта Gladius и указываем базу данных, которую мы будем использовать. Затем мы вставляем запись в телефонную книгу таблицы и проверяем, что запись была вставлена ​​правильно, посмотрев на значение, присвоенное errstr после выполнения запроса. Если что-то пошло не так, мы увидим это здесь.

Теперь, когда у нас есть запись в базе данных, мы извлекаем ее копию, выполняя SELECT * в таблице телефонной книги, затем перебираем результаты в цикле foreach. После этого мы выводим полученную информацию в виде простой структуры таблиц HTML, чтобы ее было легко читать.

Как вы можете видеть, с Gladius довольно легко работать — так же легко и просто, как с SQLite. Так как он основан на файлах и написан на чистом PHP, вам нужно совсем немного, чтобы его запустить, и почти ничего не требуется для его отладки.

При развертывании приложения необходимо убедиться, что расположение базы данных имеет соответствующие разрешения на чтение / запись, чтобы пользователь веб-сервера или пользователь командной строки (если он используется для запуска сценариев оболочки) мог управлять файлами.

Оптимизации и настройки
Но что, если вы хотите сделать это быстрее или есть некоторые ограничения файловой системы? Что вы собираетесь делать, если не можете сохранить файловую систему? Всегда есть другое место для хранения файлов, например, ОЗУ, которое легко доступно через TMPFS или RAMFS .

Используя TMPFS, вы можете выделить часть физической ОЗУ или памяти для использования в качестве раздела файловой системы. У Geek Stuff есть превосходный простой пример того, как его настроить. Я оставлю это на усмотрение, чтобы объяснить преимущества и недостатки его использования, но вот то, как его реализовать.

mkdir -p /mnt/tmp
mount -t tmpfs -o size=20m tmpfs /mnt/tmp

После этого вы можете указать Gladius хранить файлы базы данных в разделе TMPFS и наблюдать, как вы (потенциально) получаете увеличение скорости на порядок. В качестве альтернативы вы можете написать пользовательскую оболочку вывода потока PHP для хранения файлов либо в APC, либо в memcache.

Итак, хотя Гладиус начинает казаться довольно упрощенным, вы можете увидеть силу, когда она быстро становится очевидной.

Firebird
Согласно Википедии , Firebird возникла из открытого исходного кода Borland InterBase в 2000 году. Firebird — это система управления реляционными базами данных с открытым исходным кодом, изобилующая перечисленными ниже функциями и многими другими. Он соответствует большому проценту стандарта SQL: 2003. Firebird доступен для распространения по варианту публичной лицензии Mozilla , которая называется Public License Public Developer (IDPL).

Особенности
То, что вы, возможно, не слышали об этом, не означает, что оно не стоит вашего внимания. Давайте посмотрим на набор функций, которые предоставляет Firebird, и посмотрим, насколько он хорош.

• Поддержка ОС: Доступно на всех основных платформах , включая Linux, Windows, Mac, FreeBSD и HP-США
• несколько поколений архитектуры: несколько версий записей хранятся в базе данных до тех пор, по крайней мере , одна транзакция нуждается в них
• Протоколирование и мониторинг в режиме реального контроль времени, отладка SQL-запросов и четкое отслеживание аудита
• Расширенная безопасность: независимо от того, работаете ли вы на * NIX или Windows-сервере, вы получаете
широкую поддержку , Rails и MS Visual Studio
• Высокая производительность: готовность к многопроцессорному и многоядерному SMP
• Высокая масштабируемость: поддержка баз данных размером до 20 ТБ

Для чего это хорошо?
Ну, мягко говоря, Firebird подходит практически ко всему, что и большинство других баз данных. Теперь нет, он не имеет точно такой же набор функций, но если вы посмотрите на это довольно подробное сравнение, вы получите хорошее представление о том, как они складываются. (Вы также можете посмотреть эти слайды на сайте slideshare.net .)

В двух словах, вот несколько полезных применений:

• Вы выполняете работу OLTP или OLAP
• Вы выполняете работу, требующую дополнительных функций, таких как триггеры, хранимые процедуры и пользовательские функции (UDF)
• Вам необходимо взаимодействовать с событиями базы данных
• Вы выполняете стандартную или встроенную работу с базой данных
• Вы создаете приложения, которые должны масштабироваться с течением времени.
• У вас есть разработчики, использующие различные языки и платформы.

Как его использовать В
зависимости от вашей платформы установка Firebird довольно проста. Перейдите на страницу загрузки Firebird и возьмите копию установочного комплекта для вашей платформы. Или, если вы используете дистрибутив Linux, вы сможете установить его из одного из менеджеров пакетов, таких как APT или RPM.

После того, как вы установили его, база данных уже должна быть запущена. Это можно увидеть либо в диспетчере служб Windows, либо с помощью команды оболочки, такой как netstat, или следующей команды: top -b -n1 | grep ib

Затем измените имя пользователя и пароль по умолчанию на то, что вы предпочитаете, с помощью следующих команд:


gsec -user sysdba -password masterkey

GSEC> изменить sysdba -pw f1r3b1rD

GSEC> выйти

Это изменит пароль по умолчанию на f1r3b1rD. Но установите это так, как вам удобно. Firebird не поставляется с инструментами с графическим интерфейсом, поэтому вы должны либо использовать инструмент командной строки ISQL , либо сторонний инструмент, такой как Flame Robin .

Установить пример базы данных (Linux)
По умолчанию пример базы данных HR / сотрудника доступен при установке Firebird. Но вам нужно сделать несколько вещей, чтобы подготовить его к использованию. Следующие команды сделают это для нас:

cd /usr/share/doc/firebird2.5-examples/examples/empbuild/
 
# set the ownership correctly
sudo chown firebird.firebird employee.fdb
 
# put a copy of the database in the firebird data directory
sudo cp -rv employee.fdb /var/lib/firebird/2.5/data/
 
# connect to it to ensure that it's working
isql-fb "/var/lib/firebird/2.5/data/employee.fdb" -u 'SYSDBA' -p 'masterkey';

Теперь у вас есть образец базы данных, и вы готовы к работе. Обратитесь к официальной документации по установке для получения дополнительной информации.

Простой пример
Приведенный ниже код является простым, но эффективным примером взаимодействия с Firebase с использованием PHP. Посмотрите, и мы пройдем через это после этого.

<?php
 
$db = 'localhost:/var/lib/firebird/2.5/data/employee.fdb';
$dbuser = 'SYSDBA';
$dbpass = 'masterkey';
$dbcharset = 'UTF8';
$dbbuffers = 20;
 
if (($dbh = ibase_connect($db, $dbuser, $dbpass, $dbcharset, $dbbuffers)) == FALSE) {
    print "unable to connect to database";
} else {
    print "connected to database";
 
    $stmt = "SELECT * FROM EMPLOYEE";
    $result = ibase_query($dbh, $stmt);
    $count = 0;
    echo "<br />";
    while ($row = ibase_fetch_assoc($result)) {
        $row = (object)$row;
        printf ("Name: %s <br />", $row->FIRST_NAME . ' ' . $row->LAST_NAME);
        $count++;
    }
}

В приведенном выше примере мы подключились к образцу базы данных сотрудников, которую мы установили ранее. Мы установили ряд переменных для использования в коде и использовали функции ibase в PHP для подключения к базе данных.

После этого мы запустили простой запрос SELECT * к таблице сотрудников и перебрали результаты, которые были получены в виде ассоциативного массива. Как видите, все имена столбцов указаны в верхнем регистре. Но кроме этого, возможно, так же просто, как и с любой другой базой данных, с которой можно взаимодействовать.

If you’re a PDO user (and I really encourage you to be if you’re not,) there’s an experimental extension for Firebird/Interbase available. I haven’t tested it myself, so I can’t say what it’s like, but feel free to try it out and let us know your feedback in the comments.

Winding Up
So as you can see, there’s an increasing array of options available outside of the ‘mainstream’ you can use. We now have a database library, a flat-file PHP database and an open source relational database near on par with SQLServer and Oracle. The choices just keep growing with every part of the series.

Have you used either Gladius or Firebird? Tell us about your experiences in the comments.