150M записей по имени - PullRequest
       15

150M записей по имени

1 голос
/ 16 сентября 2011

У меня есть набор данных около 150 миллионов записей, который генерируется ежедневно, он содержит: member_id, member_name, member_name_first_letter

Мне нужно получить список, упорядоченный по member_name asc

Я попробую с MySQL, если я разбью по первой букве имя_члена и запускаю запрос для всех один раз (около 40 различных: AZ, цифры, специальные символы). Я могу заполнить таблицу примерно за 40 минут, без срывов до фристов, позже ткает часами. для теста я использую только 13 миллионов записей. В любом случае, мне нужно, чтобы они были намного быстрее (цель: 1-2 минуты).

Как я могу это сделать? Может ли MongoDB помочь?

Ответы [ 3 ]

2 голосов
/ 16 сентября 2011

Если вы используете InnoDB и делаете member_name первичным ключом таблицы, он всегда будет неявно упорядочен по этому столбцу, поэтому вы можете SELECT ... FROM members без предложения order-by.Таблицы InnoDB на самом деле являются кластеризованным индексом .


. Ваш комментарий: Вы также можете определить составной первичный ключ , и таблица будет в порядке имя-членаmember_name - это первый столбец в первичном ключе.

0 голосов
/ 16 сентября 2011

Расширяя идею Билла Карвина, если вы можете добавить новый столбец при получении данных, вы можете сгенерировать уникальный первичный ключ, добавив к имени временную метку, разделенную пробелом, чтобы избежать каких-либо странных проблем с конкатенацией (что вряд ли кто-либо имя будет числовым, но все же).

0 голосов
/ 16 сентября 2011

Mongo - это не вариант, попробуйте использовать индекс для имя_члена,
другие решения - упорядочить данные и разбить их на несколько таблиц или создать индекс для поля имя_члена с помощью внешних инструментов

...