В yii2-advanced примерно так и сделано. Но у нас каждый проект - отдельный сервер, отдельная инсталляция. Почти все проекты будут горизонтально масштабироваться. Так что такой вариант не подойдет.
Объект живет в задании воркера очереди, которое может выполняться сколько угодно времени. Я конечно рассматриваю вариант, вынести эту логику за пределы AR, но интересны и другие варианты.
id bigint PRIMARY,
type character varying(20),
name character varying(400),
alias character varying(100),
count integer,
country integer,
city integer,
site character varying(255),
status character varying(30),
is_active smallint,
date character varying(20)
Вообще условия фильтрации предполагаются по любым полям, не только по городу.
workload 100% read only. Когда база обновляется, она закрыта для чтения. По поводу multicolumn gin пока не совсем понимаю как. Насколько я понимаю, gin ведь нельзя на обычные integer поля создать? И как в нем обстоит с операторами больше-меньше? Можно пример на основе тех полей, что я выше описал?
Составной индекс в теории вряд ли мог чем-то помочь, но решил попробовать на практике. Вообще с индексами провожу эксперименты относительно недавно, поэтому опыта мало, прошу строго не судить. Индексы на остальные поля, потому что по остальным полям тоже нужна фильтрация в самых разных комбинациях.
По поводу того, часто ли нужен запрос. Дело в том, что условия в запросах могут быть по каким угодно столбцам и когда угодно. И хотелось бы чтобы они все быстро отрабатывали. На shared_buffers выделено 6 гигабайт памяти из доступных 18. work_mem в общем конфиге 5мб установлен. Я так понимаю, чтобы любые запросы отрабатывали быстро, таблица должна быть разогрета вся полностью, а чтобы ее разогреть, надо ее всю в память загнать. Т.е. взять серверов с суммарным количеством памяти под 200гб и делать шардинг, я правильно понимаю? Если так, то это не слишком дешево получается. Или все-таки есть другой способ?
id bigint PRIMARY,
type character varying(20),
name character varying(400),
alias character varying(100),
count integer,
country integer,
city integer,
site character varying(255),
status character varying(30),
is_active smallint,
date character varying(20)
На поле name индекс gin(to_tsvector()). На остальные поля btree индекс. И один составной индекс еще решил попробовать тоже btree на поля id и city. Он в запросе и использовался.
EXPLAIN (ANALYZE,BUFFERS) SELECT id, name, alias, count FROM public.item WHERE city = 8
Bitmap Heap Scan on "item" (cost=103708.16..7024255.99 rows=5540592 width=57) (actual time=4566.896..1333276.255 rows=5640073 loops=1)
Recheck Cond: (city = 8)
Rows Removed by Index Recheck: 99736844
Heap Blocks: exact=13625 lossy=2174087
Buffers: shared read=2203126
-> Bitmap Index Scan on ix_item_city (cost=0.00..102323.01 rows=5540592 width=0) (actual time=4548.816..4548.816 rows=5640073 loops=1)
Index Cond: (city = 8)
Buffers: shared read=15414
Planning time: 113.841 ms
Execution time: 1334887.657 ms
Все кроме 404. Мне нужно, чтобы формат вывода 404 зависел от того есть в url наличие api/ после первого слеша или нет. Судя по всему, на уровне модуля это не решается, т.к. если url не найден, то до модуля дело не доходит, - срабатывает errorHandler и его action.
evnuh: А что подразумевается под стандартным тюнингом? У меня, помню, при выборке из таблицы 100 млн. записей в PostgreSQL обычный селект выполнялся десятки секунд. С индексом выполнялся быстрее, но все равно это настораживает.
Понятно, что к этому нужно стремиться, но сейчас сроки поджимают, нужно хоть как-то уже сделать, чтобы работало.. Еще вопрос, допустим, популярные образы уже существуют, из них можно слепить композицию, а как быть с кодом? Дело в том, что в моем случае в контейнере удобно, что все сразу - и код, и окружение. Как вообще правильно, под код отдельный контейнер создавать или копировать его на каждый сервер и подключать как том, учитывая, что серверов может быть и 20, и 50, на которые нужно будет все это развернуть?
Да, изначально конечно был докер файл, там была прописана установка redis, php7 и модулей, потом был создан образ через docker build, из него был создан контейнер, который постоянно дополнялся нужными файлами, в нем изменялись настройки и т.д., после чего был docker commit и docker save
У меня сейчас реализовано не через Dockerfile, а просто есть файл с образом, который закачивается на сервера и через docker load грузится, после чего есть возможность использовать только docker run. Просто хочу понять, возможно ли таким путем сделать то, что я хочу, или все-таки нужно на каждый сервер закачивать исходники с докер файлом и делать build
Вручную все проверено, все запускается. Мне надо, чтобы все эти команды запускались автоматически внутри контейнера при рестарте сервера или при старте контейнера
Запускаю docker run -td --restart=always --net=host -p 6379 -e SERVER_IP=xx.xx.xx.xx --name name image-name /etc/init.d/redis-server start
В docker logs при этом:
Starting redis-server: redis-server.
Starting redis-server: redis-server.
Starting redis-server: redis-server.
Starting redis-server: redis-server.
...
И с каждым разом количество этих записей увеличивается. Статус контейнера restarting
А как тогда указать условие, где jsonb_field не содержит значения 4? Ведь если содержит, его добавлять не нужно. Значения в сете каждой записи должны быть уникальными.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.