Статьи

Еще две неосновные базы данных для приложений PHP

Мэтью Сеттер — профессиональный технический писатель и страстный разработчик веб-приложений. Он также является основателем  Malt Blue , сообщества профессионалов по разработке веб-приложений на PHP и специалистов по разработке облачных решений  PHP  — изучающих разработку облачных вычислений через призму PHP. Вы можете связаться с ним в  TwitterFacebookLinkedIn  или  Google+ в  любое время.

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

В этой заключительной части серии мы собираемся закончить, рассмотрев две выдающиеся, но заметно отличающиеся базы данных: eXist DB и Hypertable . Итак, начнем.

eXist DB
eXist DB немного отличается от других баз данных, которые мы рассматривали до сих пор. Если вы помните Gladius DB (с чистой базой данных PHP) из части 2, то вам понравится eXist DB.

eXist DB — это база данных, написанная на Java, в которой хранится информация XML, не требующая промежуточного уровня. Это стало возможным благодаря поддержке ряда интерфейсов, включая:

* XPath : язык XML Path
* XQuery : язык XML Query
WebDAV : создание и управление версиями в сети
REST : передача представительного состояния (кодировка URL)
SOAP : протокол доступа к простым объектам
XACML : язык контроля доступа
XML-RPC : удаленный протокол вызова процедуры
XQiB : XQuery в браузере http://xqib.org

Возможности
eXist DB упрощают разработку приложений, полностью написанных на XQuery, в сочетании с несколькими другими технологиями, включая XSLT, XHTML, CSS и Javascript. Он также обеспечивает перезапись URL, инфраструктуру MVC и поддержку XProc.

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

* Дата / Время
* Кэш
* Сжатие
* SQL
* Почта
* Планировщик

Вы можете найти полный список в документации модулей расширения .

Чем хорош eXist DB eXist,
созданный в 2000 году Вольфгангом Майером , является удивительно гибкой и способной системой баз данных. Поскольку он построен на Java и поддерживает широкий спектр открытых стандартов, eXist можно легко развернуть в любой операционной системе с надежным уровнем поддержки Java. Как и большинство баз данных, которые мы обсуждали до сих пор, он также имеет автономный и встроенный режим.

Если вы хотите встроить базу данных в существующий продукт или подключиться к серверу по сети, eXist DB обеспечит вас. А поскольку он может взаимодействовать со многими интерфейсами, eXist DB может удовлетворить ваши потребности в разработке независимо от того, работаете ли вы на PHP, Java, C ++, C #, Python, Ruby или других.

Как это использовать
Поскольку мы сосредоточены на использовании базы данных, мы собираемся быстро ее установить, чтобы начать работу. Сначала возьмите последнюю версию с сайта eXist. Затем выполните следующую команду, настроенную для загруженного файла:

java -jar eXist-[version]-build-XXXX.jar

Это установит его локально для вас. После этого запустите сервер со следующим:

bin/startup.sh // or .bat for Windows

После этого ваш сервер должен работать. Вы можете проверить это, открыв:

http://localhost:8080/exist/index.xml

Когда вы установили базу данных, вас попросили ввести имя пользователя и пароль. По приведенной выше ссылке перейдите в Администрирование -> Администратор и войдите в систему с этими учетными данными, затем нажмите « Настройка примеров» . Оттуда убедитесь, что отправленные файлы eXist-db проверены, и нажмите Import Files .

После того, как вы это сделали, у вас есть необходимые данные, загруженные для работы следующего примера кода. Но для работы с кодом в PHP вам понадобится копия PheXist. Поэтому возьмите копию и распакуйте ее в каталог, доступный вашему веб-серверу.

Простой пример
Теперь, когда у вас есть готовый к работе сервер eXist-DB и PHP-библиотека PheXist, создайте новый файл сценария, используя выбранную вами среду IDE, в которой вы развернули файлы PheXist.

Прочитайте, и мы пройдем вместе.

<!--?php <br ?-->include ('include/eXist.php');
 
try
{
    $db = new eXist('', '', 'http://localhost:8080/exist/services/Query?wsdl');
 
    # Connect
    $db->connect() or die ($db->getError());
 
    $query = 'for $line in //SPEECH[SPEAKER = "BERNARDO"]/LINE return $line';
 
    print "
<strong>XQuery:</strong>
$query
";
 
    # XQuery execution
    $db->setDebug(TRUE);
    $db->setHighlight(FALSE);
    $result = $db->xquery($query) or die ($db->getError());
 
    # Get results
    $hits = $result["HITS"];
    $queryTime = $result["QUERY_TIME"];
    $collections = $result["COLLECTIONS"];
 
    print "
found $hits hits in $queryTime ms.
 
";
 
    # Show results
    print "
<strong>Result of the XQuery:</strong>
 
";
print "
";
    if ( !empty($result["XML"]) )
        foreach ( $result["XML"] as $xml)
            print htmlspecialchars($xml) . "
";
    print "
";
 
    $db->disconnect() or die ($db->getError());
} catch(Exception $e) {
    die($e);
}

Он подключается к локальному запущенному экземпляру eXist-DB и записям запросов, которые соответствуют ‘// SPEECH [SPEAKER = “BERNARDO”] / LINE’. Если вы не знакомы с XQuery , ознакомьтесь с некоторыми хорошими учебниками, прежде чем продолжить.

То, что мы ищем, — это любая запись в выступлениях, где спикер «Бернардо». Эти записи фильтруются, а затем возвращаются. После этого мы перебираем результаты и выводим их в браузер. Мы заканчиваем, отключаясь в конце.

Как видите, его довольно просто использовать — очень похоже на традиционную RDBMS.

Hypertable
Теперь мы переходим от базы данных XML к базе данных, предназначенной для масштабирования до самых крупных задач: Hypertable. Как вы увидите на сайте Hypertable, он создан для одной цели:

«… Для явной цели решения проблемы масштабируемости, проблема, которая не решается хорошо традиционной СУБД… Hypertable основана на дизайне, разработанном Google для удовлетворения их требований к масштабируемости, и решает проблему масштабирования лучше, чем любой другой NoSQL. решения там. »

Это достигается путем предоставления четырех ключевых преимуществ, которые обеспечивают функции пакета. Эти:

* Масштабируемость : Предназначено для масштаба и обработка больших массивов данных , чем большинство других решений предусматривают
* Экономию затрат : Предназначено для требуют меньше аппаратных средств и потребления энергии, что приводит к улучшению выхода за меньшие ввода
* Производительность : Через меньше требований к аппаратному обеспечению, можно сделать больше с меньшими затратами в результате с более высокой пропускной способностью и быстротой реагирования
* Чистая семантика : когда данные записываются в Hypertable, они появляются для каждого последующего запроса

Особенности
Но на что я намекал ранее? Вот лишь несколько из них для вашего удовольствия от просмотра:

* Работает на распределенных файловых системах, таких как Hadoop DFS , GlusterFS и Kosmos FS.
* Написано почти на 100% на C
*. Полная поддержка языков для Java, PHP, Python, Perl и C ++.
* Предназначена для обработки сценариев с высокой масштабируемостью.
* Данные физически отсортированы по первичный ключ
* Предназначен для высокой эффективности и производительности
* Надежные данные
* Отлично подходит для ситуаций ‘Ready Mostly’
* Хранит структурированные или неструктурированные данные

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

Если вам нужна полная профессиональная поддержка, вы можете обратиться в Hypertable Inc. Если вы хотите протестировать ее, как мы делаем в этом посте, вы можете установить ее отдельно вместе со слоем ThriftBroker на локальный Linux или * BSD сервер. Кроме того, существует множество промежуточных опций, таких как соединение с Hadoop или MapR .

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

Я собираюсь привести небольшой пример, основанный на одном из документации Hypertable . Следуйте инструкциям ниже, и вы будете готовы к работе.

wget http://cdn.hypertable.com/pub/query-log.tsv.gz
 
wget http://cdn.hypertable.com/pub/query-log.tsv.gz
 
/opt/hypertable/current/bin/ht shell
 
use "/";
 
create namespace "Tutorial";
 
use Tutorial;
 
CREATE TABLE QueryLogByUserID ( Query, ItemRank, ClickURL );
 
LOAD DATA INFILE ROW_KEY_COLUMN="%09UserID"+QueryTime TIMESTAMP_COLUMN=QueryTime "query-log.tsv.gz" INTO TABLE QueryLogByUserID;

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


Загрузка 7,464,729 байт входных данных …
 

0% 10 20 30 40 50 60 70 80 90 100%

| —- | —- | —- | —- | —- | —- | —- | —- | —- | —- |

************************************************** *

Загрузка завершена.
 

  Истекшее время: 9,84 с

Средний размер значения: 15,42 байта

  Средний размер ключа: 29,00 байт

    Пропускная способность: 4478149,39 байт / с (764375,74 байт / с)

   Всего ячеек: 992525

    Пропускная способность: 100822,73 кл / с

       Отправлено: 0

Хорошо, теперь, когда это сделано и готово, откройте ваш редактор по вашему выбору. Там создайте новый пустой файл и скопируйте приведенный ниже код, который я объясню позже.

<?php
 
if (!isset($GLOBALS['THRIFT_ROOT']))
    $GLOBALS['THRIFT_ROOT'] = getenv('PHPTHRIFT_ROOT');
 
require_once $GLOBALS['THRIFT_ROOT'].'/ThriftClient.php';
 
$client = new Hypertable_ThriftClient("localhost", 38080);
$namespace = $client->namespace_open("Tutorial");
$tablename = "QueryLogByUserID";
 
$tableQuery = $client->hql_query($namespace, "show tables");
$fourRecords = $client->hql_query(
    $namespace,
    "select * from QueryLogByUserID limit=4"
);
 
$mutator = $client->mutator_open($namespace, $tablename, 0, 0);
$key = new Hypertable_ThriftGen_Key(
    array(
        'row'=> '005753377 2008-11-14 05:50:29',
        'column_family'=> 'Query')
);
$cell = new Hypertable_ThriftGen_Cell(
    array(
        'key' => $key,
        'value'=> 'www.athorization.net'
    )
);
$client->mutator_set_cell($mutator, $cell);
$client->mutator_close($mutator);
 
sleep(2);
 
echo "scanner examples\n";
$scanner = $client->scanner_open($namespace, $tablename,
    new Hypertable_ThriftGen_ScanSpec(array('limit'=> 4)));
 
$cells = $client->scanner_get_cells($scanner);
 
while (!empty($cells)) {
  print_r($cells);
  $cells = $client->scanner_get_cells($scanner);
}
$client->namespace_close($namespace);

В этом примере мы подключаемся к Hypertable через Thrift-клиент через порт 38080, а затем подключаемся к существующему пространству имен, которое называется Tutorial, которое мы создали ранее.

Затем мы выполняем простую операцию запроса для отображения таблиц, как мы могли бы это сделать в традиционных СУБД, таких как MySQL или PostgreSQL. После этого мы получаем четыре записи из таблицы QueryLogByUserID, которую мы создали.

Затем мы создаем новую запись для добавления в таблицу QueryLogByUserID, которая выглядит так, как показано ниже:


Значение ключа

2008-11-14 05:50:29 www.athorization.net

Это покажет, что был запрос ‘Query’ 2008-11-14 05:50:29, и запрос был для www.athorization.net. Затем мы сохраняем запись и после этого извлекаем больше записей и выводим их на экран.

Теперь, чтобы быть справедливым, это довольно простой пример. Но, надеюсь, вы поймете, что взаимодействие с Hypertable, используя PHP и ThriftBroker, не сильно отличается от того, что происходит с традиционной СУБД. Да, у него немного другой синтаксис, но вы можете получить его довольно быстро.

Заключение
В этой серии мы рассмотрели пять хороших баз данных, которые бесплатны и готовы к использованию с вашими PHP (или другими языковыми) приложениями, независимо от того, используются ли они во встроенной работе или для приложений, которым требуется вся мощь и масштабируемость вы можете собрать.

С Gladius DB и eXist-DB мы рассмотрели базы данных с плоскими файлами и XML. Мы также рассмотрели хранилище ключей / ветеранов в Berkeley DB, полностью масштабируемую базу данных в Hypertable и замечательную RDBMS в Firebird. Я надеюсь, что один или несколько из этих обращений к вам, и вы дадите им тестовый прогон.

Независимо от того, что кто-то говорит, всегда есть варианты и варианты. Примите решение, которое лучше для вас и ваших проектов.

Если у вас есть какие-либо отзывы о любой из баз данных в этой серии, дайте мне знать, если комментарии.