БД под миллиарды записей и быстрые выборки

Привет.

Есть задача: организовать хранение нескольких (около 5) миллиардов записей, которые можно медленно обновлять, но нужно быстро выбирать. Схема многомерная, т.е. каждая такая запись связана с другими через внешние ключи, которые также участвуют в критериях выборок.

Для примера пусть это будут автомобили на продажу/аренду, все их характеристики раскиданы по другим таблицам, по ним нужно искать. Автомобилей много. MySQL даже с индексами справляется с этим не очень.

Что делать? CouchDB? Hadoop? Или просто спроектировать нормально можно?
Всё-таки, не такое уж и большое число, миллиард этот.
Денег мало.
  • Вопрос задан
  • 13534 просмотра
Решения вопроса 1
antarx
@antarx
Шардинг и денормализация данных, БД имеет большей частью вкусовые значения.

То есть, минимизируйте внешние зависимости и следите за ними на уровне приложения. Небольшие таблицы лучше целиком хранить в каком-нибудь memory-хранилище (кеш приложения, nosql — не важно). Далее, явно разделите данные по основному ключу (скажем, номер продаваемого итема), и храните в разных БД. Если вдруг неожиданно окажется, что для не-сервисных операций нужны выборки, не связанные с основным ключом — вы либо что-то делаете не так, либо храните именно эти данные в другой бд.
Ответ написан
Пригласить эксперта
Ответы на вопрос 10
@gleb_kudr
PostgresQL.
Ответ написан
Комментировать
Денормализация -> нет необходимости делать JOIN'ы -> возможность отказа от SQL -> возможность горизонтального масштабирования -> profit
Ответ написан
Комментировать
Urvin
@Urvin
MS SQL очень дорого?
Ответ написан
Комментировать
Я бы посоветовал использовать MySQL или что угодно другое, что будет поддерживать быстрые выборки по первичному ключу, а поиск по параметрам проводить через специальные средства — например, тот же sphinx.

Просто индексируете сфинксом свою базу, ищете ч/з сфинкс, он возвращает Id записи, по ид уже быстро вытаскиваете контент из MySQL.
Ответ написан
Комментировать
@ToSHiC
Раз редко обновляете — сделайте несколько слейвов, нагрузка на каждый делится пропорционально их количеству.
Ответ написан
Комментировать
@1nd1go
Для этого советуют Riak
Ответ написан
Комментировать
opium
@opium
Просто люблю качественно работать
Приведите примеры таблиц и запросов к mysql
миллиард записей не так уж и много.
Ответ написан
Комментировать
@Neir0
Базарю для этого отлично подходят документоориентированные БД. У них как раз медленная запись, но очень быстрое чтение. Соответственно не нужны никакие внешние ключи, вся инфа по машине будет храниться в одном документе. Сам работал с RavenDB, но думаю для вас это не лучший вариант, можно посмотреть в сторону MongoDB. Миллиарды записей не проблема.
Ответ написан
Комментировать
@betal
mysql slave,
nosql
Ответ написан
Комментировать
@shagguboy
вам нужны битмап индексы. в Mysql их нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы