2009-10-14 8 views
1

У меня есть очень большая таблица, которая в настоящее время составляет около 70 миллионов строк и ежедневно растет тысячами, эта схема опрокидывается каждый день, поэтому я перехожу к секционированной таблице и перепроектирование ddl.mysql 7columns pk vs. 1 column md5 уникальное ограничение

В основе таблицы лежит коллекция NOT NULL INTEGERS (некоторые из которых некоторые INT немного) , которые должны иметь уникальное ограничение для набора из 7 столбцов (больше столбцов в таблице), это очень дорого вычислить для каждой вставки и увеличить размер файла индекса намного больше, так как я никогда не получаю от него, я бы предпочел отказаться от него и каким-то образом md5 /, возможно, просто выполнить значения ... пока не знаю.

проблема заключается в том, что единственным типом столбца, который может содержать такое большое уникальное число, является varchar, я спрашиваю, действительно ли этот ПК будет лучше? allso, так как у меня будет PRIMARY KEY 'part_key' (site_id, id), мне нужно будет принять уникальное ограничение при проектировании раздела, чтобы суммировать ... Я уверен, что это не новая проблема, но я не смог найти никаких тестов/документов, сравнивающих их, есть ли у кого-нибудь опыт в этой проблеме? Вопрос будет реальным, если PK будет целым 8 полей (помните, что эта таблица, вероятно, будет содержать более 100 миллионов строк), когда я никогда не получаю pk или просто хешированное значение уникальных полей PS: получение в основном делается двумя из 7 столбцов Размер диска не является проблемой спасибо.

ответ

0

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

обновление: по-видимому, MySQL 5.1.6 и позже сделать поддержку обрезку (http://dev.mysql.com/doc/refman/5.1/en/partitioning-pruning.html), поэтому мой сильный совет обновить, а затем позволить MySQL обрабатывать разбиение для вас, возможно, с использованием хэш-значение одного из ваших 7 столбцов ,

0

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

Я застрял на MySQL 5.0. Мне приходится вручную разбивать несколько таблиц на 40M строк. У меня есть идентификатор документа, который я могу использовать в своем приложении: floor(docID/10)%100. Это может дать мне 100 разделов, и это должно значительно уменьшить размер моего индекса. Я сделал запрос на стол и подсчитывали количество строк с помощью хэш:

select count(docID), floor(docID/10)%100 as partno 
from documents 
group by partno 

К счастью, я нашел очень равномерное распределение на моей первой попытки. Ваша собственная формула будет иной, я понятия не имею, каково будет ваше распределение. Вы обеспокоены тем, что ваше уникальное ограничение не будет задерживаться перед разделением?

Если вы можете воспользоваться разделением MySQL, это будет более мощным и менее эффективным для вашего приложения.