http://www.php.net/manual/en/ref.dba.php – Функции доступа к Berkeley DB с примером.
Проверил на своем хостинге, у меня работает db3 (
Yuri Makarov).
И даже очень шустро.
- Создание базы
- Запись х 1000 раз
- (Проверка наличия, Чтение, Удаление) х 1000 раз
На моем хостинге все это заняло 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");
?>
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 критичные вещи:
- Скорость. Можно критичные по скорости индексы хранить в db (не знаю есть ли они у вас).
- Объем базы My SQL. Хостинг баз дорого стоит, а BDB не стоит ничего (просто файл на диске). Можно скажем сами страницы (и прочие объемные вещи) хранить в db, а в базе хранить только ссылки. Это уменьшит размер базы My SQL, не исключено, что увеличит скорость ее работы.
Наверное такие изменения не сильно затронут остальной код?
RomanIvanov Нет, никакого смысла в этом нет, так как dba – не часть php-core, а расширение, которого на системе вполне может не быть. Поэтому полагаться на него глупо.
НеизвестныйАноним: Так же как и
My SQL. Он ведь не у всех есть. Вообще, попытка переноса
Wacko Wiki например на mssql наталкивается на повсеместное использование специфичного именно для
My SQL диалекта SQL. К тому же инсталляционная страничка вообще не использует db/mysql.php. Ужас какой-то.