Size: a a a

2021 March 15

NS

Nurzhan Saktaganov in Python KZ
Bauka Alimgazy
У меня сайт работает с REST API, бекэнд на php но это не суть важно, на сайте есть поиск - его главная функция, она очень медленно работает, 5-60 секунд, там страницы представлены ввиде JSON, база данных mySQL, поиск работает через WHERE json LIKE "%query% OR title LIKE "%query%"", то есть мне лучше заменить БД на postgreSQL? Разработка сайта стоит из за этого медленного поиска или вообще переписать на другой ЯП?
А тут точно что-то изменится, если поменять базу на postgre? Я бы начал с проверки этого без переписывания. Ещё возможно, что дело в запросе
источник

NS

Nurzhan Saktaganov in Python KZ
Bauka Alimgazy
Страницы представлены ввиде большого JSON, страниц очень много, больше 30К наверное
Вроде такой поиск всегда будет fullscan, и индексы для такого паттерна запроса и не построишь
источник

NS

Nurzhan Saktaganov in Python KZ
Bauka Alimgazy
Может для каждой страницы сделать список слов и количество вхождении, потом искать по этим словам? Но я понятия не имею как это реализовать
Это называется обратный индекс)
Может не стоит руками это реализовывать? Есть готовые решения, например, elastic search
источник

A

Azamat in Python KZ
Nurzhan Saktaganov
Вроде такой поиск всегда будет fullscan, и индексы для такого паттерна запроса и не построишь
триграм индекс в постгресе работает для таких кверей

пример из рандомной статьи в гугле: https://niallburkley.com/blog/index-columns-for-like-in-postgres/
источник

BA

Bauka Alimgazy in Python KZ
Nurzhan Saktaganov
Это называется обратный индекс)
Может не стоит руками это реализовывать? Есть готовые решения, например, elastic search
Ок спс
источник

NS

Nurzhan Saktaganov in Python KZ
Azamat
триграм индекс в постгресе работает для таких кверей

пример из рандомной статьи в гугле: https://niallburkley.com/blog/index-columns-for-like-in-postgres/
Хм, и mysql что-то похожее тоже поддерживает оказывается
https://dev.mysql.com/doc/refman/8.0/en/innodb-fulltext-index.html
источник

BA

Bauka Alimgazy in Python KZ
Nurzhan Saktaganov
Хм, и mysql что-то похожее тоже поддерживает оказывается
https://dev.mysql.com/doc/refman/8.0/en/innodb-fulltext-index.html
Кстати у меня каждая страница хранится ввиде JSON, но там текста который отображается наверное процентов 35 от общего количество символа в JSON,  поскольку в JSON хранятся еще ссылки на картинки, цвета элементов, разные типа bb тэги  и html элементы. Имеет ли смысл для каждой страницы дополнительно создать еще один столбец, в котором хранятся только слова в странице? И по этому столбцу делать поиск
источник

NS

Nurzhan Saktaganov in Python KZ
Bauka Alimgazy
Кстати у меня каждая страница хранится ввиде JSON, но там текста который отображается наверное процентов 35 от общего количество символа в JSON,  поскольку в JSON хранятся еще ссылки на картинки, цвета элементов, разные типа bb тэги  и html элементы. Имеет ли смысл для каждой страницы дополнительно создать еще один столбец, в котором хранятся только слова в странице? И по этому столбцу делать поиск
Кстати, а какая версия mysql стоит?
1. Надо еще посмотреть, с какой версии появилась такая фича поиска и поддерживается ли в установленной версии.
2. Движок же myisam/innodb? Full-text indexes can be used only with InnoDB or MyISAM tables,
3. А столбец типа json? Тогда придется явно создавать доп столбец char/varchar/text: FULLTEXT indexes are created on text-based columns (CHAR, VARCHAR, or TEXT columns)
4. Если стобец уже char/varchar/text -- то наверное сначала лучше поэкспериментировать с разными вариантами стоит ли добавлять и что это даст + сделать какой-то прогноз на будущее если на сейчас будет ок
источник

BA

Bauka Alimgazy in Python KZ
Nurzhan Saktaganov
Кстати, а какая версия mysql стоит?
1. Надо еще посмотреть, с какой версии появилась такая фича поиска и поддерживается ли в установленной версии.
2. Движок же myisam/innodb? Full-text indexes can be used only with InnoDB or MyISAM tables,
3. А столбец типа json? Тогда придется явно создавать доп столбец char/varchar/text: FULLTEXT indexes are created on text-based columns (CHAR, VARCHAR, or TEXT columns)
4. Если стобец уже char/varchar/text -- то наверное сначала лучше поэкспериментировать с разными вариантами стоит ли добавлять и что это даст + сделать какой-то прогноз на будущее если на сейчас будет ок
Не помню какая версия MySQL стоит но могу поставить любую, движок InnoDB. Спасибо, я тогда сделаю еще один столбец внутри которого будут хранится только слова через пробел, которые есть в странице.
источник

BA

Bauka Alimgazy in Python KZ
Я спрашивал про это проблему в PHP, MySQL чате) Нормально помогли только здесь
источник

NS

Nurzhan Saktaganov in Python KZ
Bauka Alimgazy
Не помню какая версия MySQL стоит но могу поставить любую, движок InnoDB. Спасибо, я тогда сделаю еще один столбец внутри которого будут хранится только слова через пробел, которые есть в странице.
рад, если что-то из этого оказалось полезным)
еще один момент, запрос надо будет делать не через LIKE, а  чеерз MATCH() ... AGAINST
источник

BA

Bauka Alimgazy in Python KZ
Nurzhan Saktaganov
рад, если что-то из этого оказалось полезным)
еще один момент, запрос надо будет делать не через LIKE, а  чеерз MATCH() ... AGAINST
Это в mySQL по умолчанию есть?
источник

NS

Nurzhan Saktaganov in Python KZ
Bauka Alimgazy
Это в mySQL по умолчанию есть?
Пишут, что с версии 3.23.23

Тут еще много интересного пишут:
http://www.mysql.ru/docs/man/Fulltext_Search.html
источник

BA

Bauka Alimgazy in Python KZ
Спс, прочитаю
источник

NS

Nurzhan Saktaganov in Python KZ
Nurzhan Saktaganov
Пишут, что с версии 3.23.23

Тут еще много интересного пишут:
http://www.mysql.ru/docs/man/Fulltext_Search.html
Еще более менее норм пост вроде
https://habr.com/ru/post/40218/
источник

bW

be Wit in Python KZ
вопрос по iogram
у меня есть своя бд. я через бот провожу анкетирование пользователя через  statesgroup. перед state.finish() отправляю все стейты в свой бд. тогда я думаю мне не нужен fsm

если пользователь после  какое то время вернётся чтобы посмотреть что он там ответил. то нужно по Id пользователя нужно забрать его стейты. чтобы показать его стейты их нужно записать в fsm или можно обойтись без этого?
источник

.

. in Python KZ
be Wit
вопрос по iogram
у меня есть своя бд. я через бот провожу анкетирование пользователя через  statesgroup. перед state.finish() отправляю все стейты в свой бд. тогда я думаю мне не нужен fsm

если пользователь после  какое то время вернётся чтобы посмотреть что он там ответил. то нужно по Id пользователя нужно забрать его стейты. чтобы показать его стейты их нужно записать в fsm или можно обойтись без этого?
Fsm тебе позволяет хранить твои стейты не записывая их в бд. Если хочешь ты можешь это не юзать.
источник

bW

be Wit in Python KZ
понял
источник

bW

be Wit in Python KZ
.
Fsm тебе позволяет хранить твои стейты не записывая их в бд. Если хочешь ты можешь это не юзать.
тогда fsm это типа vue store ?
источник

DC

Dan Chegreyev in Python KZ
Если хочешь показать что человек ответил , создай отдельные апи чтобы показать его данные и через кнопки показывай какие данные он ввёл
источник