Повысьте скорость, перейдя на NoSQL - PullRequest
0 голосов
/ 22 ноября 2018

Здравствуйте и спасибо за чтение моего вопроса!

В настоящее время мы используем PostgreSQL v.10 на 3 узлах через столон (https://github.com/sorintlab/stolon) У нас есть 3 таблицы (я хочу упростить свой вопрос):

  1. Счет (150 000 000 записей)
  2. Пользователь (35 000 000 записей)
  3. Пользователь_адрес (20 000 000 записей)

Основной запрос выглядит следующим образом (исходный запрос большой, использует временную таблицу и имеет много условий, но в примере показана моя проблема.)

select 
    i.* 
from invoice as i 
inner join get_similar_name('Jon') as s on i.name ilike s.name 
left join user_address as a on i.user_id = a.user_id
where 
    a.state = 'OH'
    and
    i.last_name = 'Smith'
    and
    i.date between '2016-01-01'::date and '2018-12-31'::date;

Функция get_similar_name возвращает похожие имена (пример: get_similar_name('Jon') will return John, Jonny, Jonathan ... и т. д.) в среднем 200 - 1000 имен. Я должен использовать функцию: \

Запрос выполнялся долго, около 30 - 120 секунд, но если я исключуфункция get_similar_name из запроса, тогда время выполнения будет не более 1 секунды.

Я уже настроил PostgreSQL и сервер работает довольно хорошо. Я также создал индексы, и мой запрос не использует seq scan ии т.д.

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

Я думаю о переносе моего склада в MongoDB

Мои вопросы:

  1. Прав ли я в переездев MongoDB?
  2. Повысить производительность, если я переместу хранилище из PostgreSQL на 20-40 узлов под управлением MongoDB?
  3. Возможно ли иметь функцию get_similar_name в MongoDB или аналогичном решении?Если да, то как?
  4. У вас есть хороший опыт использования полнотекстового поиска в MongoDB?
  5. Это правильный способ использования MongoDB в рабочей среде?
  6. Не могли бы вы посоветовать"google-vector" для правильного решения по вашему мнению?

1 Ответ

0 голосов
/ 25 ноября 2018

Я не знаю, решит ли переход на MongoDB проблему текстового поиска, но Postgres обладает отличными функциями, такими как Vector и trigram.Вы устали от всего этого?

https://www.compose.com/articles/mastering-postgresql-tools-full-text-search-and-phrase-search/

https://www.postgresql.org/docs/9.6/pgtrgm.html

В моем предыдущем проекте мы использовали pg_trgm и были очень довольны его производительностью.

...