Метод SELECT в Rumba DB для cms Rumba Blank

Posted by: Rumba
Date: Tue, 25 Dec 1979 09:29:52
Tags: бесплатно создать сайт cms системы cms База данных

— Да мои орлы газет не читают, книг в глаза не видели.
— Ну, не надо перехваливать.
(© О бедном гусаре замолвите слово)


При дальнейшей проработке структуры базы Rumba Data Base показалось несколько нелогичным, что с ПРИЗНАКОМ работает (для удобства движка) класс rdb, в то время как по логике вещей это делать должен движок. Т.е. класс rdb должен быть более абстрагирован от данных, когда от него требуется, он делает выборку, а уж с выборкой пусть разбирается тот, кто её заказал. Исходя из этого, что хранится в ПРИЗНАКе, базу совершенно не волнует, она только проводит выборку, а как и что сложить в ПРИЗНАК для дальнейшей удобной работы решается на этапе проектирования движка и с помощью его средств.

Как пример в версии 0.8 движок хранит в ПРИЗНАКЕ сериализованный массив с кучей тэгов, описывающих статью: tape, name, desc. Это удобно для обработки - сделал запрос, и получил строку, рассериализовав которую можно сразу обращаться к членам массива. Надо только не забывать, что и запрос должен быть правильно подготовлен, если надо, отсериализован (и тогда из него должны быть удалены кое-какие символы - смотрите пример в Rumba Blank) - как видите, это решается в коде движка.

При этом в массиве, сериализуемом для ПРИЗНАКа, адреса членов массивов не могут быть из двух и более слов, т.е. `tape`=>`Всё о CMS` - это правильно, а `tape news`=>`Всё о CMS` - уже неправильно.

Теперь перейдём к самому методу, который делает выборку: вместо кучи функций мы получили одну - select (название взято из MySQL). Общий синтаксис запроса таков:

select (ЗАПРОС, ГДЕ_ИЩЕТСЯ, ЧТО_ВОЗВРАЩАЕТСЯ, СДВИГ, КОЛИЧЕСТВО)


  • ЗАПРОС - что ищем, возможно - ключ статьи, возможно - кусок свойства
  • ГДЕ_ИЩЕТСЯ - варианты key (ищем в ИМЕНи) sign (ищем в ПРИЗНАКе)
  • ЧТО_ВОЗВРАЩАЕТСЯ - варианты min (массив с ПРИЗНАКом) max (массив с КОНТЕНТОМ)
  • СДВИГ - сколько записей пропустить с конца
  • КОЛИЧЕСТВО - возвращаемых записей

    Намного поподробней рассмотрим каждый из параметров:

    ЗАПРОС

    Если ищется конкретная статья, то это просто её имя, но если делается выборка по элементу признака, то тут всё сложнее. Допустим, у нас в составе ПРИЗНАКа есть отсериализованный элемент tape, и мы ищем, когда tape=>rumba. Можно конечно просто искать rumba, но велик шанс, что в текстах ПРИЗНАКа или КОНТЕНТА промелькнет это слово, и выборка будет проведена неправильно (тут на движок возлагается задача по уникализации ПРИЗНАКа). Можно сделать и попроще, внеся в ПРИЗНАК не сериализованный массив, а простою строку вида tape_rumba, уникальность которой уже выше. В Rumba Blank выбран вариант с сериализацией, как дающий высокую степень уникализации плюс удобство работы с рассериализованным массивом.

    ГДЕ_ИЩЕТСЯ

    Если мы предлагаем опцию key, то при поиске RDB заключает запрос в двойные кинжалы, что совершенно исключает ошибочную выборку по ПРИЗНАКу вместо ИМЕНи. При состоянии sign запрос используется в обычном режиме, подразумевая работу с ПРИЗНАКом.

    ЧТО_ВОЗВРАЩАЕТСЯ

    Ключи min и max регламентируют, откуда будет делаться выборка (возвращаться результат). При min вся работа проводится с файлом *_map.rdb, который на один-два порядка меньше, соответственно, работа с ним будет проведена быстрее, что самым положительным образом скажется на скорости скрипта. Опцию max надо использовать тогда, когда от базы мы хотим получить КОНТЕНТ, и этот режим конечно же немного медленней (работают два файла, а не один). Но поскольку полный КОНТЕНТ мы обычно хотим получить только при заходе на конечную страничку сайта, то он выбирается в единственной записи, и это может быть даже быстрее, чем выборка десятка записей с возвратом ПРИЗНАКов.

    СДВИГ

    Этот параметр активно используется для разбиения ленты новостей на страницы, соответственно, для заглавной страницы это всегда ноль, а также для выборки конкретной записи по ИМЕНи.

    КОЛИЧЕСТВО

    Эта опция увязана со СДВИГом. Например, если СДВИГ==5 а КОЛИЧЕСТВО==6, то будет выбран массив записей со сдвигом из 30 записей количеством 6 штук. Для поиска по ИМЕНи конкретной записи нужно задать СДВИГ=0 а КОЛИЧЕСТВО=1 (или не задавать вообще, так как эти параметры проставлены по умолчанию).


    Рассмотрев коротко один, но универсальный метод select, необходимо пару слов посвятить и оптимизации организации БД на конкретном разрабатываемом движке. Есть несколько вариантов:
  • База будет состоять из небольшого (не более нескольких тысяч) записей, при этом КОНТЕНТ будет велик ~100Кб на одну запись. В этом случае лучше сделать более подробную и удобную модель ПРИЗНАКа, чтобы как можно реже работать с КОНТЕНТом.
  • Количество записей будет велико - 100к записей, при этом КОНТЕНТ записей будет наоборот мал. Тогда минимизируем размер ПРИЗНАКа, чтобы время на выборку в больших массивах составляло разумную величину.
  • При прочих равных условиях база из 1000 записей в 10Кб будет работать оптимальней, чем база с 10000 записями в 1Кб, т.е. количество записей более критично, чем их размер, соответственно, при работе с миллионом записей скорость работы будет значительно ниже.
  • Если общий размер базы предполагается не более десятка мегабайт, на первое место ставьте вопрос удобства организации структур ПРИЗНАКа, так как скорость выборки будет в любом случае высокая.

    Все изменения в Rumba Data Base транслированы и в Rumba Blank, соответственно, эту простую CMS вы можете использовать для просмотра вариантов работы с Rumba DB. Лицензия остается прежней, а значит, креативные решения на основе Rumba Blank для новичков приветствуются и поддерживаются. Пробуйте, и получится.


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


    Портал на CMS Rumba  Денвер и Zend Opimiser  Система управления содержимым  Платить или не платить – вот в чем вопрос  CMS для html-сайтов Rumba Tree 





    Комментарии


    Маэстро

    Thu, 17 Dec 2009 05:57:05

    Потянет, но тут вы можете ускорить все это с помощью размещения фалов базы и индекса на других дисках Обратите внимание, что при создании объекта мы указываем путь, где они будут храниться. 10000 записей для RDB - это нормальная цифра. Скорость обработки запроса будет зависеть от скорости работы дисковой системы.


    Прохор

    Fri, 18 Dec 2009 06:27:47

    Подскажите, Маэстро, а полтора гига база потянет? Мне надо кучу художественных текстов в движок пихнуть, все тексты большие, порядка 100 килобайт.


    Маэстро

    Thu, 17 Dec 2009 09:56:51

    База тестировалась на массиве данных размером 200 мегабайт с количеством записей 20000 штук, скорость работы движка была совершенно нормальной (страницы генерировались ~0.05 сек).


    Проза жизни

    Thu, 17 Dec 2009 10:18:34

    Маэстро, вот что мне нравится, так это цитаты перед статьёй - всегда что-нибудь необычное...Унификация SELECT вместо многочисленных GET очень удобна, и остроумно сделана выборка с его же помощью одной записи по ключу. Хотелось бы подобным образом и функции редактирования скучковать.Пробовали ли вы потестировать на большой базе свою BD ? Любопытно, как она будет себя вести при гиговой базе при примерно штуке статей. Т.е. одна запись будет в мегабайт...


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


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





    Ввести код:


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