Big Base Demo

admin
Site Admin
Posts: 37197
Joined: Wed Sep 10, 2008 11:43 am

Big Base Demo

Post by admin »

Поскольку все мы любим добавлять много-много галер сделали демо сайта аля nudevista.com на субдомене http://bigbase.smartcj.com/

Кому интересно - подписывайтесь на тему, по мере наполнения сайта сюда будет дописываться что и как делается.

Так же если надо пример какого-то функционала - так же пишите сюда.



Это пример того, как сделать большую базу (пример nudevista.com)

Тестировалось на базе 12М галер (к моменту публикации думаю уже больше)

1. Наполнение

Сейчас импортсет умеет добавлять дамп практически любого размера, но конечно это занимает определенное время.
Просто добавляем в импорт сет нужные урлы и по мере обработки будет виден процент добавленного.
Обратите внимание, что это именно добавление в базу. Создание тумб, обработка правил и тп так же занимает опредленное время.
те не стоит ожидать что за сутки будет добавлено 10М галер, но они будут добавлены в итоге.

При добавлении есть ньансы:
- некоторые тубы дают полный дамп в архиве. Скрипт не будет сам распаковывать его, вам надо скачать руками и распаковать его самостоятельно

- поскольку дампы бывают очень большие, а серваки их могут отдавать медленно то в итоге можно столкнуться с таймаутом. В этом случае можно добавлять как
/full_path_to/super_big_dymp.csv те не как урл, а как путь на вашем серваке.

- таги - лучше если у вас будет сразу whitelist потому что после большого дампа с разных тубов таги образуются миллионами и разобрать их очень слонжо,
а тк база больша то процесс этот получается довольно медленным



2. в includes/config.php надо добавить

$config['big_database_flag'] = true;

это флаг который говорит скрипту и базе, о том, что не надо подсчитывать общее кол-во результатов.
В реальности серфера не интерисует у вас 9 852 231 галер или 9 902 345. Если очень надо какое-то число на сайте - выведите его прямо в темплейте.
Для особой "динамики" можете вывести как <?=rand(....)?>

Из-за того что мы не знаем общего кол-ва галер по запросам - не будет навигации по страницам.
Точнее будет только навигация вперед и назад, но не будет нумерации страниц.


3. Темплейты и скорость работы сайта.
В версии 1 запросы по тагам, по моделям и по категориям были построены грубо говоря одинаково. Из-за этого при запросе категории в которой было 100-200к галер такие запросы были довольно медленными.
В версии 2 изменена структура базы, что бы запросы по таким большим категориям были быстрыми. Это актуально для сайтов где 12М галер и конечно в категории может быть очень много галер.



4. При такой большой базе не обойтись без Sphinx.

Он позволяет искать быстро, а именно поиск будет основным инструментом. (http://smartcj.com/wiki/doku.php?id=ru: ... inx_config)
В конфиг скрипта прописываем основной индекс и дельта индекс. Зачем нужен дельта индекс написано выше.

Реиндексация: в ссылке выше написано про реиндексацию, в целом надо взять график нагрузки и посмотреть в какой момент суток нагрузка меньше всего и поставить реиндексацию на это время.

Пример конфига

Code: Select all

source big_base_source
{


        type                                    = mysql

        sql_host                                = localhost
        sql_user                                = ****
        sql_pass                                = ***
        sql_db                                  = ***
        sql_port                                = 3306  # optional, default is 3306

        #sql_query_pre = SET CHARACTER_SET_RESULTS=utf8
        sql_query_pre = SET NAMES utf8
        sql_query_pre = UPDATE rot_settings SET value = (SELECT MAX(gallery_id) FROM rot_gallery_info) WHERE name = 'sphinx_max_gallery_id'

        sql_query_range = SELECT MIN(gallery_id),MAX(gallery_id) from rot_gallery_info;
        sql_range_step = 1000000

        sql_query                               = SELECT gi.gallery_id, UNIX_TIMESTAMP(gi.activation_date) as date, alt, description, gi.duration, sponsor_id, gs.total_ctr, gi.content_type, \
                                                        (SELECT group_concat(tag_name) FROM rot_gal2tag g2t \
                                                        LEFT JOIN rot_tags as t on t.tag_id = g2t.tag_id \
                                                        WHERE g2t.gallery_id = gi.gallery_id) as tags, \
                                                                                                       \
                                                        (SELECT group_concat(tag_id) FROM rot_gal2tag g2t \
                                                        WHERE g2t.gallery_id = gi.gallery_id) as tag_ids, \
                                                                                                       \
                                                        (SELECT group_concat(gss.group_id) FROM rot_gallery_stats1 as gss \
                                                        WHERE gss.gallery_id = gi.gallery_id AND group_id != 0) as categories \
                                                        FROM rot_gallery_info AS gi \
                                                        JOIN rot_gallery_data1 AS gd ON gi.gallery_id = gd.gallery_id \
                                                        JOIN rot_gallery_stats1 AS gs ON gs.gallery_id = gi.gallery_id \
                                                        WHERE gallery_status = 'active' and gallery_type = 0 \
                                                        AND gs.best_thumb = 'yes' and gs.group_id = 0 \
                                                        AND gi.gallery_id >= $start AND gi.gallery_id <= $end


        sql_attr_timestamp              = date
        sql_attr_uint               = duration
        sql_attr_uint               = sponsor_id
        sql_attr_float              = total_ctr
        sql_attr_uint               = content_type
    sql_attr_multi                      = uint tag_ids from field; 
    sql_attr_multi                      = uint categories from field; 

}


source big_base_source_delta : big_base_source
{
    sql_query_pre = SET NAMES utf8
        sql_query_range = SELECT (SELECT value FROM rot_settings WHERE name = 'sphinx_max_gallery_id'), (SELECT MAX(gallery_id) FROM rot_gallery_info) 

        sql_query                               = SELECT gi.gallery_id, UNIX_TIMESTAMP(gi.activation_date) as date, alt, description, gi.duration, sponsor_id, gs.total_ctr, gi.content_type, \
                                                        (SELECT group_concat(tag_name) FROM rot_gal2tag g2t \
                                                        LEFT JOIN rot_tags as t on t.tag_id = g2t.tag_id \
                                                        WHERE g2t.gallery_id = gi.gallery_id) as tags, \
                                                        (SELECT group_concat(tag_id) FROM rot_gal2tag g2t \
                                                        WHERE g2t.gallery_id = gi.gallery_id) as tag_ids, \
                                                        (SELECT group_concat(gss.group_id) FROM rot_gallery_stats1 as gss \
                                                        WHERE gss.gallery_id = gi.gallery_id AND group_id != 0) as categories \
                                                        FROM rot_gallery_info AS gi \
                                                        JOIN rot_gallery_data1 AS gd ON gi.gallery_id = gd.gallery_id \
                                                        JOIN rot_gallery_stats1 AS gs ON gs.gallery_id = gi.gallery_id \
                                                        WHERE gi.gallery_id > $start AND gi.gallery_id <= $end \
                                                        AND gallery_status = 'active' and gallery_type = 0 \
                                                        and gs.best_thumb = 'yes' and gs.group_id = 0
    
}



index big_base_index
{
        source                                  = big_base_source
        path                                    = /*****/big_base_index
        docinfo                                 = extern
        morphology              = stem_en
}



index big_base_delta : big_base_index
{
    source = big_base_source_delta
    path = /*****/big_base_delta
}



5. Создание тумб категорий, тагов, моделей

Поскольку база большая то подсчет точного кол-ва тумб в категориях и моделях не ведется.
Фактически никому точная цифра там не надо, а это позволяет убрать лишнюю нагрузку.



6. Имеет смысл отключить автоматическое создание бекапов в скрипте и делать бекапы самостоятельно опять же в то время когда меньше нагрузки.
Конечно, не одновременно с реиндексацией.


7. Что можно отметить в дефолтных темплейтах

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery-autocomplete/1.0.7/jquery.auto-complete.min.js"></script>

подгружаем общие либы с cdn, а не со своего хоста.

-------

в поиск форме есть автодополнение, хорошее решение прогнать какое-то кол-во слов и фраз через domain/?search=... что бы набралась база с самого начала

------------
Don't forget to run script update
admin
Site Admin
Posts: 37197
Joined: Wed Sep 10, 2008 11:43 am

Re: Big Base Demo

Post by admin »

List thumbs

В list thumbs если вы ищите что-то то выбирайте по какому полю искать иначе это перебор всей базы, а это небыстро и напрягает ваш сервак.
Don't forget to run script update
GangstaBros
Posts: 460
Joined: Sun Jan 05, 2014 4:34 pm

Re: Big Base Demo

Post by GangstaBros »

подписан на топик, буду рефрешить каждый день :) related серч кейворды - как такое можно прикрутить?
admin
Site Admin
Posts: 37197
Joined: Wed Sep 10, 2008 11:43 am

Re: Big Base Demo

Post by admin »

related - это когда в боксе с поиском подсказыки вылазят ?
Don't forget to run script update
GangstaBros
Posts: 460
Joined: Sun Jan 05, 2014 4:34 pm

Re: Big Base Demo

Post by GangstaBros »

это вот как тут внизу на всех пагах:

http://tubepatrol.net/japanese-elder-br ... story.html
admin
Site Admin
Posts: 37197
Joined: Wed Sep 10, 2008 11:43 am

Re: Big Base Demo

Post by admin »

<thumb search_log=all

выводит поиски которые были на сайте
Don't forget to run script update
GangstaBros
Posts: 460
Joined: Sun Jan 05, 2014 4:34 pm

Re: Big Base Demo

Post by GangstaBros »

если покликать по пагам тубпатрола , то видно что серчи внизу каждый раз разные и они более менее релевантны текущему кейворду паги .
admin
Site Admin
Posts: 37197
Joined: Wed Sep 10, 2008 11:43 am

Re: Big Base Demo

Post by admin »

Можно искать в search_log
Как определить кейворд текущей паги ?
Don't forget to run script update
admin
Site Admin
Posts: 37197
Joined: Wed Sep 10, 2008 11:43 am

Re: Big Base Demo

Post by admin »

Хорошая идея, пойдем по очереди

вот есть текущая страница галеры - кейворды это альт галеры например ?
filter keywords - какие именно брать ?
из категорий галеры ? а если тут категорий нет и все по тагам\поиску ?
Don't forget to run script update
GangstaBros
Posts: 460
Joined: Sun Jan 05, 2014 4:34 pm

Re: Big Base Demo

Post by GangstaBros »

чета мессага моя куда-то испарилась =\
Post Reply