2013-05-10 6 views
0
  • (требования)
  • Нам нужно масштабируемое раствор быстро и .
  • Нам нужен более быстрый способ делать adhoc-запросы;

Я думаю о том, чтобы разделить мой стол из 10 колонок на 10 таблиц. Таблица имеет 10 миллиардов рядов.Быстрая AdHoc Запросы

Оригинал Таблица ID, значение1, значение2, VALUE3, Value4, VALUE5, VALUE6, VALUE7, ценности8, VALUE9, VALUE10

в 10 Таблицы

  • ID, VALUE1 (индексированный по значению1)
  • ID, vALUE2 (индексированный по значение2)
  • ID, vALUE3 (индексированный по value3)
  • ID, Value4 (индексированный по Value4)
  • ID, VALUE5 (индексированный по value5)
  • ID, VALUE6 (индексированный по value6)
  • ID, VALUE7 (индексированный по value7)
  • ID, ценности8 (индексированный по ценности8)
  • ID, VALUE9 (индексируется на value9)
  • ID, vALUE10 (индексированный по value10)

Мой план, если я получил 5 положений в моем WHERE условия, переходите к 5 таблиц и попросили их не использовать HashSet, чтобы установить подмножество идентификаторы.

Мой вопрос будет я изобретать колесо? Это "Column Store DB By RDBMS "или что-то еще?

+0

Какое программное обеспечение для баз данных вы используете? – Codesleuth

+0

Как выглядят ваши запросы? Какова частота каждого из значений? Какова избирательность (сколько строк выбрано) типичного запроса? Как часто обновляются данные? –

ответ

0

Вам не нужны 10 таблиц. 1 таблицу с 10 индексов будет иметь тот же результат. Для выполнения это зависит на п. Если где положение является и выражение как

select * from table 
where value1 = x 
and value3 = y 

затем разделив запрос не поможет.

Если ваш где положение является или выражение, как

select * from table 
where value1 = x 
or value3 = y 
or value5 = z 

затем возможно перефразировать один запрос в союзе будет быстрее.

select * from table 
where value1 = x 
union select * from table 
where value3 = y 
union select * from table 
where value5 = z 

Но производительность всегда зависит от механизма базы данных и ее оптимизатора.

+0

1 таблица с 10 индексами будет иметь тот же результат. Я должен масштабировать, не теряя производительности. Больше индексов на одном столе означает меньшую производительность. Подобно 10 подружкам, живущим в одном и том же окружении.Мне нравится, когда они будут в разных городах. :) Я хотел бы иметь возможность распространять нагрузку на кластер. –

+0

Почему, по вашему мнению, 10 столов могут быть лучше, чем одна таблица с 10 индексами? 10 таблиц, означает, что для 1 строки вам нужно вставить 10 таблиц. 1 вставка должна быть быстрее, чем 10. Нагрузка может быть распределена в кластере, но приложение не должно быть затронуто. Это должно быть выполнено кластеризацией базы данных. – nakosspy

+0

Нагрузка может быть распределена кластеру, но приложение не должно быть затронуто. >>> вот почему. –