WackoWiki : BerkeleyDB

Работа с Berkeley DB в PHP


http://www.php.net/manual/en/ref.dba.php – Функции доступа к Berkeley DB с примером.

Проверил на своем хостинге, у меня работает db3 (Yuri Makarov).
И даже очень шустро.


На моем хостинге все это заняло 0.086 сек.

Код Экшена для проверки производительности:

<?php
$start_time 
microtime();

$id dba_open ("/tmp/test.db""n""db3");

if (!
$id) {
    echo 
"dba_open failed\n";
    exit;
}

for (
$i 1$i <= 1000$i++) {
   
dba_replace ("key_$i""$i:BerkeleyDB3 is OK!"$id);
}

for (
$i 1$i <= 1000$i++) {
   if (
dba_exists ("key_$i"$id)) {
      
$s dba_fetch ("key_$i"$id);
      echo 
"$s ";
      
dba_delete ("key_$i"$id);
   }
   else {
      echo 
"Error: key_$i do't exist.";
      
dba_close ($id);
      exit;
   }
}

dba_close ($id);

$stop_time microtime();
list(
$a_dec$a_sec) = explode(" "$start_time);
list(
$b_dec$b_sec) = explode(" "$stop_time);
$duration sprintf("%0.3f"$b_sec $a_sec $b_dec $a_dec);

echo 
"<br>Start: $start_time\n";
echo 
"<br>Stop:  $stop_time\n";
echo (
"<br>Processing took $duration seconds\n");
?>

Тесты Berkeley DB

YuriMakarov /25.07.2003 17:12/ Потестировал вчера на домашнем компе (AtlonXP+ 1500)

Простейший тест:
Создание базы, запись на диск коротких записей длиной ~50 байт
100К записей – 2.7 сек, ~9 Mb
500К записей – 15 сек, ~45 Mb

Причем большую часть времени видимо съел РНР.
После упаковки базы (dump + load) объем сократился в 1/2 – 2 раза.

Идеи по Ваке

Roman Ivanov:

В принципе, конечно, возможно переделать имеющийся DBAL так, что он будет кушать не SQL-запросы, а прямо предоставлять методы с параметрами.

Типа: SearchForTextInPages('text'), LoadPageByTag('tag') и т.д.

Тогда реализация BDB-слоя станет возможной, но сильно затруднится написание других слоёв.

Кроме того, мне лениво это делать, и я не уверен, что это получится хорошая архитектура =)

Кусо Мендокуси: Ээ... пока что я боюсь этого. Можно написать мощнецкий дбал, связав себя по рукам и ногам в разработке акшнов. Придётся думать, как реализовать тот или иной акшн сразу в двух БД. мне пока не нравится. Но, конечно, в первую очередь — некогда. Да и в Нпж нам не пригодится совсем.

Yuri Makarov: Может быть есть смыл хотя бы часть системы сделать на Berkeley DB?

Есть 2 критичные вещи:
  1. Скорость. Можно критичные по скорости индексы хранить в db (не знаю есть ли они у вас).
  2. Объем базы My SQL. Хостинг баз дорого стоит, а BDB не стоит ничего (просто файл на диске). Можно скажем сами страницы (и прочие объемные вещи) хранить в db, а в базе хранить только ссылки. Это уменьшит размер базы My SQL, не исключено, что увеличит скорость ее работы.

Наверное такие изменения не сильно затронут остальной код?

RomanIvanov Нет, никакого смысла в этом нет, так как dba – не часть php-core, а расширение, которого на системе вполне может не быть. Поэтому полагаться на него глупо.

НеизвестныйАноним: Так же как и My SQL. Он ведь не у всех есть. Вообще, попытка переноса Wacko Wiki например на mssql наталкивается на повсеместное использование специфичного именно для My SQL диалекта SQL. К тому же инсталляционная страничка вообще не использует db/mysql.php. Ужас какой-то.