• Подходт ли elixir для highload web-сервиса?

    begemot_sun
    @begemot_sun
    Программист в душе.
    Я ерлангер. Для начала опишите ваш кейс. Просто странички генерировать может кто угодно, где-то это быстрее, где-то это медленнее. Вы вообще можете переписать все на C/C++, летать будет - гарантирую.

    По части Erlang/Elixir. По сути это одно и тоже, только в разной обертке. Все это выполняется на Erlang VM.
    Cчитаю Elixir в настоящее время больше заточен для веб наличием разного рода либ, типа Феникса или ORM Octo (так кажется?).
    В Erlang это более низкоуровневые либы, но и свободы творчества больше.
    Есть всякие N2O, Nitrogen и т.п.

    Что хорошо в этих языках, так это:
    1. Вы можете не использовать сторониие сервисы чтобы хранить состояние. Все может хранится в памяти.
    2. Вы легко можете распаралелить работу на несколько ядер (если это позволяет задача). Никакой PHP не даст тут такой гибкости.
    3. Вы можете быть уверены в надежности. Можете контроллировать когда приложение будет падать, а когда нет.
    4. Ну всякие бенчмарки: www.ostinelli.net/a-comparison-between-misultin-mo...
    5. Да еще. Erlang/Elixir-приложуху можно прозрачно кластеризовать на несколько машин, конечно она должна это поддерживать.
    Ответ написан
    3 комментария
  • Как реализовать работу баз данных с разными дисками?

    Melkij
    @Melkij
    PostgreSQL DBA
    Ответ написан
    Комментировать
  • Нормально ли хранить логи в основной базе?

    darthunix
    @darthunix
    Знаю PostgreSQL, Ubuntu, DICOM и медицину.
    Ну если основная база от логов сильно распухает и транзакции вам для них особо не нужны - вынесите логи через plproxy в другую базу (на другом диске/сервере - не важно). Храните их в нормализованном виде и анализируйте, будет вам счастье. И основная база будет компактной, и нагрузка на неё будет меньше, и логи хранятся в таком же PostgreSQL (чем меньше зоопарк, тем проще с ним жить)
    Ответ написан
    Комментировать
  • Нормально ли хранить логи в основной базе?

    sim3x
    @sim3x
    Храни в виде текста
    Загружай в субд паком за час / день / неделю
    Перед загрузкой нормализуй
    Что ты там нашаманишь в итоге - никто не знает
    Так что следи за таймингами основных запросов
    Ответ написан
    Комментировать
  • Нормально ли хранить логи в основной базе?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    eto-norma_17169846_orig_.jpeg
    Ответ написан
    Комментировать
  • Как правильно реализовать поиск по ключевым фразам?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега PostgreSQL
    Седой и строгий
    Запугали человека. Может у него база мааааленькая и ненагруженная. В этом случае можно и постгрессовским FTS'ом обойтись.

    Перед поиском массив нужно просто конвертировать в строку.
    SELECT id FROM some_table WHERE to_tsquery('причёска') @@ to_tsvector(array_to_string(keys, ', '));

    Однажды таблица вырастит и захочется ускорить поиск индексом. Самый просто способ - создать функциональный индекс, который будет поле keys конвертировать в строку.
    CREATE INDEX keys_fts_idx ON some_table USING gin(to_tsvector(array_to_string(keys, ', ')));

    А когда захочется ещё ускориться, можно использовать вариант, который наиболее часто применяется - добавить в таблицу ещё одно поле и сделать триггер, который при вставке или обновлении записи будет поле keys этой записи конвертировать в строку и в дополнительное поле сохранять, а индекс для полнотекстового поиска строить уже по этому полю.
    ALTER TABLE some_table ADD COLUMN keys_fts tsvector;
    CREATE INDEX keys_fts_idx ON some_table USING gin(keys_fts);
    
    CREATE FUNCTION keys_fts_update() RETURNS TRIGGER AS $$
    BEGIN
    	IF (TG_OP = 'UPDATE') THEN
    		IF OLD.keys <> NEW.keys THEN
    			NEW.keys_fts = to_tsvector(array_to_string(NEW.keys, ', '));
    			RETURN NEW;
    		ELSE
    			RETURN NEW;
    		END IF;
    	ELSIF (TG_OP = 'INSERT') THEN
    		NEW.keys_fts = to_tsvector(array_to_string(NEW.keys, ', '));
    		RETURN NEW;
    	END IF;
    	RETURN NULL;
    END;
    $$ LANGUAGE 'plpgsql';
    
    CREATE TRIGGER keys_fts_update BEFORE INSERT OR UPDATE ON some_table
    FOR EACH ROW EXECUTE PROCEDURE keys_fts_update();
    Ответ написан
    4 комментария
  • Как правильно реализовать поиск по ключевым фразам?

    al_gon
    @al_gon
    Правильно было бы отказаться от SQL и идти в сторону поисковых движков.
    Ответ написан
    9 комментариев