Несколько файлов баз

Тема в разделе "Thunder 3.X", создана пользователем ddn128, 19 мар 2018.

  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  1. ddn128

    ddn128 Опытный Пользователь

    31 дек 2015
    527
    245
    Мужской
    Собсвенно подумалось, что можно же хранить разные типы данных в разных базах (slite)
    1. с мелкими (тематичными) файлами\базами работать проще, чем ворочить 1 файл на десятки гигабайт и миллионы строк
    2. т.е. получится нечто комбинированное между sql и файловым кешем (лишённым недостатка выжирания инодов)

    Собственно как такое реализовать?
    1. либо через конфиг
    2. либо через плагин (что-то вроде cache_save \ cache_fetch с третьим параметром "название базы") - ИМХО предпочтительнее т.к. можно прямо в шабе ними манипулировать
    Итого получим например:
    database.db - база с глобальными настройками для всего домена
    cat_database.db - база с категориями
    post_database.db - база с постами
    .... ну или как-то так
     
  2. amness

    amness Активный Участник

    11 апр 2016
    251
    86
    Мужской
    Попробуй с этой строкой поигратся в index.php:
    $cache->setNamespace(str_replace('www.', '', $c->request->getUri()->getHost()));
    и отловить имя роута
    $request->path()
    Для каждого роута будет своя база.
     
    ddn128 нравится это.
  3. ddn128

    ddn128 Опытный Пользователь

    31 дек 2015
    527
    245
    Мужской
    поигрался но нифига не понял, что с этим делать :(
    точнее как задать новый (точнее свой)?
     
  4. amness

    amness Активный Участник

    11 апр 2016
    251
    86
    Мужской
    Примерно так.
    Код:
    $uri = request->getUri()
    
    $domain = str_replace('www.', '', request->getUri()->getHost());
    
    $path = $uri->getPath();
    
    Потом делаешь проверку вхождения в $path(х.з как там правильно в пхп, додумаешь):
    Код:
    if 'category' in $path:
        $dbname = 'category'
    
    $cache->setNamespace($dbname.$domain);

    Получаешь базу с именем categorydomain.com.db
    Может где-то ошибся, пхп нет под рукой.
     
  5. ddn128

    ddn128 Опытный Пользователь

    31 дек 2015
    527
    245
    Мужской
    спасибо. но я не настолько силён в пыхе :(
    1. это надо колдовать в index.php или делать плаг
    2. где тогда и как прописывать данные для баз
    3.
    это получается одновременно можно использовать только 1 базу? Т.е. варик где 1 база "глобальная" с общими настройками, а вторая "для категорий" не получится?
     
  6. amness

    amness Активный Участник

    11 апр 2016
    251
    86
    Мужской
    Можно использовать несколько баз, но нужно чтоб роут уникальный был. Например:
    Код:
    dor.com/post/blablabla
    dor.com/category/blablabla
    dor.com/podcategory/dlablabla
    
    Делаешь if на вхождение в урл и присваеваешь имя для каждой базы. По другому х.з. как.
     
  7. ddn128

    ddn128 Опытный Пользователь

    31 дек 2015
    527
    245
    Мужской
    не-е задумка в другом - возможность читать базы должна быть на любом урле.
    Т.е. например я нахожусь на
    dor.com/post/blablabla

    В части где нужно получить глобальные настройки - я читаю базу "database.db" (лого \ пути к css\js \ меню .... )
    в части где выводится контент я читаю базу "post_database.db" (текст поста)
    в сайтбаре (например) - "cat_database.db" - например подкатегории (дочерние) категории в которой находится пост ...

    Я это "вижу" :) как-то так:

    Код:
    <head>
    {% set global_db = путь/database.db %}
    
    {% block head %}
    {% set cache_global = cache_fetch('cache_head', global_db) %}
    {{cache_global}}
    {% endblock %}
    ...
    </head>
    т.е. просто считал необх. кусок с указанной БД и вывел



    и например

    Код:
    <body>
    {% set post_db = путь/post_database.db %}
    
    {% set cache_post = cache_fetch(keyword, post_db) %}
    <div>
    {{cache_post}}
    </div>
    ...
    т.е. просто считал необх. кусок с другой указанной БД и вывел

    ну да + кусок с if - если не нашёл то что нужно - то генерит

    В принципе это можно реализовать плагином в котором будет прописана выборка и запись в\из БД

    Код:
    INSERT INTO ...
    
    и
    
    SELECT * FROM
    просто подумалось - раз в доргене уже есть подобный класс (чтения\записи) - то нафига писать ещё один :) если можно просто слегка подправить (т.е. добавить возможность указать имя \ путь к базе)
     

Поделиться этой страницей