Как структурировать чрезвычайно большую таблицу

Это скорее концептуальный вопрос. Он вдохновлен использованием очень большой таблицы, где даже простой запрос занимает много времени (правильно проиндексирован). Мне было интересно, есть ли лучшая структура, чем просто позволять таблице постоянно расти.

Под большим я подразумеваю 10 000 000+ записей, которые ежедневно растут примерно на 10 000 в день. Для такой таблицы каждые 2,7 года будут добавляться 10 000 000 дополнительных записей. Допустим, к более свежим записям обращаются чаще всего, но более старые должны оставаться доступными. У меня есть две концептуальные идеи, чтобы ускорить это:

1) Поддерживать главную таблицу, в которой хранятся все данные, индексированные по дате в обратном порядке. Создайте отдельное представление для каждого года, содержащее данные только за этот год. Затем при запросе (допустим, ожидается, что запрос будет извлекать только несколько записей за трехлетний период) я мог бы использовать объединение, чтобы объединить три представления и выбрать из них.

2) Другой вариант - создать отдельная таблица на каждый год. Затем, снова используя объединение, чтобы объединить их при запросе.

Есть ли у кого-нибудь еще какие-нибудь идеи или концепции? Я знаю, что с этой проблемой столкнулся Facebook, как вы думаете, как они с этим справились? Я сомневаюсь, что у них есть одна таблица (status_updates), содержащая 100000000000 записей.

7
задан Alan B. Dee 21 July 2011 в 20:29
поделиться