Инструкция по RDB 0.9

Posted by: Rumba
Date: Sun, 06 Jan 1980 09:29:52
Tags: бесплатно настройка установка cms php новостной База данных

Обычай мой такой:
Подписано,так с плеч долой

© А.С.Грибоедов

Ранее анонсированная Rumba Data Base 0.9, демо которой было продемонстрировано в прошлой статье на радость ожидающим выложено в паблик. Наконец-то! Теперь любой желающий может пощупать и прикрутить с своему скипту довольно бойкую БД, работающую на текстах и реализовывать свои мечты )). Работа с новой БД сведена всего к двум запросам: SELECT и EDIT. При этом SELECT по сравнению с предыдущей версией RDB также изменился, поэтому желающие подключить более новую версию должны будут подправить и запросы в своих скриптах.

В распространяемом дистрибутиве имеется простое демо, которое генерирует базу данных в 1000 записей размером в 5 мегабайт и демонстрирует варианты запросов к базе и скорость их исполнения. Ниже состав параметров для запросов будет подробно расписан, и есть надежда, что большая часть вопросов будет снята. Внимательно читайте readme.txt, в котором также расписана работа с БД и лицензия на её использование.

Метод NEW

При работе с БД для начала её нужно инициализировать. Вот примерный вариант:

Scontent = new rumba_db (
data/baza, # адрес карты базы
data/baza, # адрес базы
data/baza, # адрес кода (нет - nothing)
4, # количество полей в файле карты (меньше, чем у базы)
10000, # максимальный размер базы (записей)
64, # длина строки cod (название, адрес, и шифр)
1000, # размер map меньше которого будет перебор по map, а не по cod
10000 # размер блока для перебора
);

Здесь особое внимание следует обратить на:
  • Количество полей в файле карты - оно должно быть меньше, чем у базы. Чем меньше полей мы помещаем в карту базы, и чем компактней их содержимое, тем быстрее БД будет работать. Отметим, что поиск и выборку БД делает только по карте базы, и никогда - по самой базе, поэтому то, чего нет в карте - для поиска не существует).
  • Максимальный размер базы - при подключении БД мы должны указать предположительное максимальное количество записей. Например, на момент инициализации имеется 100 записей, мы полагаем, что за год записей станет порядка 500 (к примеру мы будем добавлять по одной в день). В этом случае разумно указать размер в 1000 записей. Следует категорически избегать переполнения базы! Другой вариант - в базе 20000 записей, и за год эта цифра обязательно удвоится. Тогда указывает размер в 50000 записей. Не следует экономить на этом параметре, поскольку его можно всегда изменить, удалив при этом файлы ХХХ_map.rdb и XXX_cod.rdb (БД их сгенерирует заново под новые параметры). Но конечно, этот параметр должен быть адекватен базе, так как 1000 записей совсем не требуют параметра в 100000 (это не логично и ведет к лишнему расходу места на диске).
  • Длина строки cod (название, адрес, и шифр) - этот параметр влияет на размер файла XXX_cod.rdb В нем мы указываем максимальный размер ID записи. Например для страницы istoria-cms.html ID будет размером в 11 букв. При значении 64 на максимальный размер длины ID отводится порядка 40 знаков. Соответственно, при 48 - примерно 24. Таким образом, если вы вдруг захотите записям давать очень длинные ID (что не рекомендуется), то параметр этот нужно будет увеличить. Длина строки cod влияет на скорость работы БД, в связи с чем желательно оставлять её в разумных пределах.

    Адреса файлов БД даются раздельно для потенциальной возможности разнести эти файлы на разные физические диски - как один из элементов возможности ускорения работы БД и использующего её скрипта.

    Метод SELECT

    Основной запрос к базе - это обычно выборка группы записей по некоторому признаку, например:
    select (Ssearch_who, Sparam, Ssearch_in=map, Ssearch_out=max, Snum_page=0, Ssize_page=10)
    - Ssearch_who, что ищем (обычно из S_GET[zapros]
    - Sparam, массив запроса вида array(-1=>array(~~, ‡))
    номер столбца (-1 во всех) и как ищем (содержит, равно, больше и т.д.)
    ~~ (!~) содержит (не содержит)
    == (!=) равно (не равно)
    >= (<=) больше (меньше) или равно
    Последний параметр - что ищем, с чем сравниваем.
    - Ssearch_in=map, искать в файле карты или в индексе
    (это только для одной страницы )
    - Ssearch_out=max, выдавать строку из карты (не все столбцы - min)
    или же из базы (медленней -max)
    - Snum_page=0, номер страницы (в ленте новостей)
    - Ssize_page=10 количество новостей на страницу

    Массив запроса param может состоять из нескольких вложенных массивов, и RDB будет перебирая строки искать те записи, которые отвечают ВСЕМ условиям запроса.

    Метод EDIT

    Для администрирования БД этот метод имеет некоторые параметры. Рассмотрим варианты использования метода edit (Sregim, Sin) где regim:
  • Добавляем статью (без проверки на существование) edit (write_one, Sww);
  • Добавляем статью (с проверкой на существование) edit (add_one, Sww);
  • Переписываем статью (медленно) edit (replace_one, Sww);
  • Переписываем статью с переносом в начало (быстро) edit (rewrite_one, Sww);
  • Удаляем статью статью edit (del_one, Sww);

    При этом
    Sin = array(id, Название статьи, razdel, rumba-Метка Румба;,
    Автор, time(), Description, Анонс, Текст, yes);


    Полезности

    Ещё несколько слов об использовании RDB:
  • При работе с RDB следует учитывать, что это линейная и БД, имеющая направление согласно хронологии заполнения (добавления) статей. Значит, при запросе SELECT (при выборке по файлу карты) первой в выдаваемом массиве результатов будет последняя, подходящая по условиям запись, второй - предыдущая и т.д.
  • Скорость выборки при запросе выборки по карте зависит от глубины запроса. Таким образом быстрей всего выбираются последние списки, и медленней всего первые (из внесенных в БД). В этом заключается идеология RDM, рассматривающая любую базу, как архив, в котором информация ищется с конца записей, и как только поиск дал нужный результат, выборка прекращается. Т.е. частота надобности линейного поиска информации обратно пропорциональна её хронологической удаленности.
  • RDB предназначена для подключения к скриптам, разработанным на РНР как простейшая альтернатива MySQL. Максимально допустимые размеры базы данных для RDB составляют 0.5 Гб при 0.5 млн. строк (записей).
  • При изменении параметров или ручной работе с основным файлом БАЗА.rdb необходимо удалить файлы карты и индекса, после чего RDB сгенерирует их заново.
  • Скорость выборки информации по ID (это по сути выборка КЛЮЧ-ЗНАЧЕНИЕ), не зависит от хронологической удаленности (расположения в базе) записи.
  • Количество полей в записи не ограниченно, но не может быть меньше трех, количество полей для карты должно быть меньше количества полей в базе, но не менее двух.
  • Поля, попадающие в карту БД отсчитываются слева направо по полям базы.
  • В крайние правые поля следует помещать наиболее крупную по размеру информацию.
  • При выдаче по запросу БД выставляет флаг SВАШАБАЗА->flag

    База данных RDB хранится в трех файлах:
    1) БАЗА.rdb - база данных (первое поле ID)
    2) БАЗА_map.rdb - карта базы, по которой и производится выборка
    3) БАЗА_cod.rdb - индекс для выборки по ID записи

    Формат выдачи по запросу SELECT:
    array
    (
    array(),
    array(),
    ...
    )
    где каждый вложенный массив - это одна запись с значениями, равными
    полям в записи.

    Версия 0.9 доведена до стабильного состояния, однако в процессе дальнейшей разработки будет постепенно модифицироваться с целью удаления ошибок и улучшения работы, при этом интерфейс её будет сохраняться, таким образом можно будет периодически заменять файл rdb.php на более новый без необходимости вносить изменения в код скриптов, работающих с RDB. Иное будет обязательно указываться при модификации. При разработке Rumba News 0.7 используется RDB 0.9, в связи с чем интерфейс БД формируется максимально удобным для использования в блого-новостном стиле работы с хронологически направленной структурой данных, учитывайте это при своих разработках.

    Сегодня мы можем твердо утверждать, что Rumba, это не только просто, Rumba, это ещё и быстро! Это Rumba.


  • Смотри также:


    Импорт базы из WordPress в Rumba XML стал ещё удобней  Администрирование в движке Easy 1.1  Импорт WordPress базы данных для Rumba XML  Простая cms система в стиле cmsimple  Денвер и Zend Opimiser 





    Комментарии


    Маэстро

    Thu, 17 Dec 2009 09:02:53

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


    Прохор

    Thu, 17 Dec 2009 08:11:34

    Я так понял, что в News уже и база и комменты на этой базе работают?


    AS

    Fri, 18 Dec 2009 05:58:41

    А вот это уже более интересно)) Спасибо за интересную фишку) Секреты румбы познаются последовательно) Спасибо Маэстро)


    Маэстро

    Fri, 18 Dec 2009 00:48:10

    В метод SELECT добавлен вариант запроса ?= который будет делать выборку УНИКАЛЬНЫХ записей. Пример: "4"=>array('?=', '1') Здесь база будет выбирать только статьи с уникальным полем номер 4. Например, если в этом поле хранится признак категории (раздела), то будет выбрано только по одной статье каждой категории. В массиве зпроса цифра 1 обозначает количество выборки статей для каждого уникального поля. Пока этот параметр не используется, но формат запроса сделан под будущие изменения.


    AS

    Thu, 17 Dec 2009 09:44:35

    Прохор, Хых, ну добавь функцию, которая будет выводить по одному посту из разной темы) В чем проблема то?)


    Прохор

    Thu, 17 Dec 2009 19:43:30

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


    Маэстро

    Thu, 17 Dec 2009 07:28:47

    Конечно, чем меньше размер, тем быстрее. Однако зависимость не прямо пропорциональная. При увеличении базы от 10 мегабайт до 100 скорость может измениться (примерно) от 0.01 до 0.02 сек. Т.е. изменение незначительное. На скорость работы тут может гораздо сильнее повлиять фрагментированность диска, на котором расположен сайт.


    Хранитель CMS

    Thu, 17 Dec 2009 22:08:52

    На сколько выборка по ключу зависит то размера базы?


    Комментировать


    Ваше имя
    Ваша почта
    Ваш сайт
    Рассылка комментариев





    Ввести код:


        Сгенерировано
        Rumba News v.1.0a
        за 0.054987 сек.