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

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

  1. ddn128

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

    31 дек 2015
    525
    244
    Мужской
    Собсвенно подумалось, что можно же хранить разные типы данных в разных базах (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
    525
    244
    Мужской
    поигрался но нифига не понял, что с этим делать :(
    точнее как задать новый (точнее свой)?
     
  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
    525
    244
    Мужской
    спасибо. но я не настолько силён в пыхе :(
    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
    525
    244
    Мужской
    не-е задумка в другом - возможность читать базы должна быть на любом урле.
    Т.е. например я нахожусь на
    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
    просто подумалось - раз в доргене уже есть подобный класс (чтения\записи) - то нафига писать ещё один :) если можно просто слегка подправить (т.е. добавить возможность указать имя \ путь к базе)
     

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