Я занимаюсь разработкой журнала проблем для своего проекта и столкнулся с проблемой при анализе зарегистрированных данных. Проблема в том, что эта таблица очень быстро растет и что фильтры, используемые для поиска данных в таблице, могут изменяться почти во всех отношениях, поскольку нас не всегда интересуют одни и те же поля. Так что индексы на самом деле не вариант.
Таблица в настоящее время находится в базе данных MySQL со следующей структурой:
CREATE TABLE `log_issues` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`id_user` int(11) DEFAULT NULL,
`type` varchar(50) NOT NULL,
`title` varchar(100) NOT NULL DEFAULT '',
`message` mediumtext NOT NULL,
`debug` mediumtext,
`duration` float DEFAULT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `date` (`date`,`title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Теперь мой вопрос: как я могу выполнять запросы к этой таблице, когда в ней миллионы записей, не ожидая результата вечно? Например, простая фильтрация по идентификатору пользователя занимает вечность. Я знаю, что могу разместить индекс в части id_user, но я мог бы захотеть объединить его с другими полями, или из-за того, как инструмент, который просматривает эти журналы, генерирует запрос, он может неправильно использовать индексы.
Думаю, мне лучше использовать MongoDB или другую базу данных NoSQL, но у меня нет с ними никакого опыта. У базы данных на основе документов легче фильтровать большой набор данных без индексов, или я всегда буду сталкиваться с этой проблемой, независимо от базы данных?
Подведем итог:
У меня есть таблица с большим количеством данных, индексы не могут быть использованы (по крайней мере, если они должны быть упорядочены), и мне нужно получить результаты, не дожидаясь более 10 секунд. Какие технологии я могу использовать?
Любые предложения будут высоко оценены.