Есть постоянно пополняемая база 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 секунд.