Задать вопрос
cryptodoxer
@cryptodoxer

В какой базе хранить и делать поиск при url >100M записей?

Есть постоянно пополняемая база url. Растет в день на 7-10 миллионов записей.
Сейчас это просто MySQL. Без хеша урла. До 200М записей и размера базы менее 100GB еще живет, далее новые вставки и селекты уже очень медленные на очень хорошем железе.

Куда копать, что выбрать для хранилища?!

Сервер: 32х ядерный xeon - 64gb ram. ssd - 512, centos

CREATE TABLE `url` (
  `id` bigint(10) UNSIGNED NOT NULL,
  `source_id` int(10) UNSIGNED NOT NULL,
  `url` varchar(255) NOT NULL,
  `checked` enum('one','two') NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `url`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `url` (`url`),
  ADD KEY `checked` (`checked`),
  ADD KEY `source_id` (`source_id`),
ALTER TABLE `url` ADD FULLTEXT KEY `url` (`url`);

ALTER TABLE `url`
  MODIFY `id` bigint(10) UNSIGNED NOT NULL AUTO_INCREMENT;
COMMIT;


фуллтекст - потому что без него вставка медленная после 30 лямов урлов
вставляется так:
$sql = $db->queryBuilder->batchInsert('url', array('url',  'source_id'), $urlInsert);
                    $db->createCommand($sql . ' ON DUPLICATE KEY UPDATE url=url')->execute();


медленная вставка - это когда запрос такой что выше на 20-30к урлах выполняется более 30 секунд.
  • Вопрос задан
  • 134 просмотра
Подписаться 3 Средний 9 комментариев
Пригласить эксперта
Ответы на вопрос 1
У нас подобное использование есть. Тоже больше милиарда урлов. Используем elasticsearch. Без анализаторов морфологии конечно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы