Как работать с большой БД?

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО InstantCMS 2.X
#1 25 февраля 2018 в 16:00
Всем привет!

Есть таблица в БД с данными (12 000 строк), как правильно работать с таблицами такого объема? Элементарное получение данных выдает ошибку о нехватки памяти.
#2 25 февраля 2018 в 16:20

выдает ошибку

Вадим Нарочный

Это смотря чем открывать.
#3 25 февраля 2018 в 16:21

Это смотря чем открывать.

ХурумБурум

Вот так примерно
  1. $this->model_content->limit(0)->getContentItems()
#4 25 февраля 2018 в 16:31
Получил данные через простой get(), проблем не возникло zst
#5 25 февраля 2018 в 16:33

Есть таблица в БД с данными (12 000 строк), как правильно работать с таблицами такого объема? Элементарное получение данных выдает ошибку о нехватки памяти.

Вадим Нарочный
120000 — это сущая ерунда. У меня таблицы контента по 1300000 и комментариев миллион. И все вертится и мгновенно открывается.
Были тормоза по моей же некомпетентности, но Fuze помог разобраться в вопросе:
instantcms.ru/forum/thread28414-2.html#282329
#6 26 февраля 2018 в 08:26
Ris, на какой версии cms?
#7 26 февраля 2018 в 08:37

на какой версии cms?

@ivanpolyakov
Речь идет о второй, если я правильно прочитал ветку)
#8 26 февраля 2018 в 08:38
@ivanpolyakov, вторая ветка
#9 26 февраля 2018 в 19:07
И всё таки я думаю что как-то я не оптимизированно делаю это! Давайте вкратце расскажу то, что хочу сделать!

На странице с записью типа контента есть список имен и фамилий (в дальнейшем ИФ) перечисленных через запятую, мне нужно чтобы ИФ становились ссылками, на соответствующие страницы в другом типе контента. Во-втором типе 12000 записей (и будет увеличиваться примерно до 150 000). В хуке я получаю всю эту таблицу get-запросом, и в цикле функцией str_ireplace меняю то, что мне необходимо. Но уже на этапе получения всей таблицы время загрузки страницы меняется например с 0.0275 на 0.3069.

Подскажите, если какой-то другой способ сделать нужное?
Если есть дополнительные вопросы задавайте!
#10 26 февраля 2018 в 19:29
Вадим Нарочный, а зачем вам получать всю таблицу? с какой целью то?
#11 26 февраля 2018 в 19:30

а зачем вам получать всю таблицу? с какой целью то?

kirkr
Потому что на странице много имен и их нужно все проверить на соответствие в этой большой таблице!
#12 26 февраля 2018 в 19:41
Вадим Нарочный, т.е. вы генерируете по 1400 запросов в базу? сверяя все фио или что?
просто Вам из базы нужно получать нужные перемены, если есть фио на странице, значит их можно запихать в переменную(пусть даже массива) и потом сделать поиск массива в базе, потом и выводите нужные вам ссылки.
SELECT * FROM FIOLINK WHERE fio IN ('$fiotext')";
#13 26 февраля 2018 в 19:50

т.е. вы генерируете по 1400 запросов в базу? сверяя все фио или что?

kirkr
Запрос всего один, получаю весь список и сохраняю в переменную!

SELECT * FROM FIOLINK WHERE fio IN ('$fiotext')";

kirkr
Попробую, позже отпишусь!
#14 26 февраля 2018 в 20:05

SELECT * FROM FIOLINK WHERE fio IN ('$fiotext')";

kirkr

Сделал такой запрос, возвращает только первое совпадение
#15 26 февраля 2018 в 20:07
Всё, нашел ошибку, там ещё пробел был после запятой. Сейчас все докручу и отпишусь!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.