Оптимальная конфигурация Mysql (раздел) и индексы/гипертаблица/конфигурация RAID (огромная база данных)

tl;rd:

  1. Разделение БД с помощью первичного ключа
  2. Проблема размера индекса.
  3. Размер БД увеличивается примерно на 1-3 ГБ в день.
  4. Настройка рейда.
  5. У вас есть опыт работы с Hypertable?

Длинная версия:

я только что построил/купил домашний сервер:

  • Ксеон E3-1245 3,4 НТ
  • 32 ГБ ОЗУ
  • 6x 1,5 ТБ WD Cavier Black 7200

Я буду использовать серверную плату INTEL S1200BTL Raid (денег на рейд-контроллер не осталось). http://ark.intel.com/products/53557/Intel-Server-Board-S1200BTL

Материнская плата имеет 4 порта SATA 3 ГБ/с и 2 порта SATA 6 ГБ/с.

Я еще не уверен, смогу ли я настроить все 6 жестких дисков в RAID 10,

если это невозможно, я думал, что 4x hdds Raid 10 (база данных MYSQL) и 2xhdds Raid 0 для (индексы OS/Mysql).

(Если рейд 0 сломается, для меня это не проблема, мне нужно только защитить БД)

О БД:

Это база данных поискового робота, где хранятся домены, URL-адреса, ссылки и тому подобное. Поэтому я решил разбить БД с первичными ключами каждой таблицы, например (1-1000000) (1000001-2000000) и так далее.

Когда я выполняю поиск/вставку/выбор запросов в БД, мне нужно сканировать таблицу отверстий, потому что некоторые вещи могут быть в ROW 1, а другие в ROW 1000000000000.

Если я создам такой раздел по первичному ключу (auto_increment), будет ли он использовать все ядра процессора? Чтобы он сканировал каждый раздел параллельно? Или мне следует придерживаться одной огромной БД без раздела.

БД будет очень большой, в моей домашней системе прямо сейчас это,

Table extract:  25,034,072 Rows
Data    2,058.7     MiB
Index   2,682.8     MiB
Total   4,741.5     MiB

Table Structure:
extract_id          bigint(20)      unsigned        NO  PRI     NULL    auto_increment
url_id       bigint(20)         NO      MUL     NULL    
extern_link     varchar(2083)           NO      MUL     NULL    
anchor_text     varchar(500)            NO      NULL    
http_status     smallint(2)     unsigned    NO      0

Indexes:
PRIMARY     BTREE   Yes No  extract_id      25034072

link        BTREE   Yes No  url_id
                            extern_link (400)   25034072

externlink      BTREE   No  No  extern_link (400)   1788148 


Table urls: 21,889,542 Rows
Data    2,402.3     MiB
Index   3,456.2     MiB
Total   5,858.4     MiB

Table Structure:
url_id      bigint(20)      NO  PRI     NULL    auto_increment
domain_id           bigint(20)      NO  MUL     NULL    
url             varchar(2083)       NO      NULL    
added       date    NO      NULL    
last_crawl      date    NO      NULL    
extracted           tinyint(2) unsigned NO  MUL     0   
extern_links    smallint(5) unsigned    NO      0   
crawl_status    tinyint(11) unsigned    NO      0   
status      smallint(2) unsigned    NO      0


INDEXES:
PRIMARY     BTREE   Yes No  url_id      21889542

domain_id       BTREE   Yes No  domain_id   0
                        url (330)   21889542

extracted_status    BTREE   No  No  extracted   2
                        status      31

Я вижу, что могу исправить externlink & индексы ссылок, я просто добавил externlink, потому что мне нужно было запросить это поле, и я не смог использовать индекс ссылок. Вы видите, что я мог бы настроить на индексы? Моя новая система будет иметь 32 ГБ, но если БД будет расти с такой скоростью, я буду использовать 90% оперативной памяти за НЕСКОЛЬКО недель/месяцев.

Помогает ли упакованный ИНДЕКС? (Как снижается производительность?)

Другие важные таблицы меньше 500 МБ.

Only the URL Source table is huge: 48.6 GiB 
Structure: 

    url_id  BIGINT
    pagesource mediumblob data is packed with gzip high compression

    Index is only on url_id (unique).

Из этой таблицы данные можно стереть, когда я извлек все, что мне нужно.

Есть ли у вас опыт работы с Hypertables? http://hypertable.org/ ‹= Google Bigtables. Если я перейду на Hypertables, поможет ли это мне в производительности (извлечение данных/поиск/вставка/выбор и размер БД). Я читал на странице, но я все еще не знаю. Потому что вы не можете напрямую сравнивать MYSQL с Hypertables. Я попробую это в ближайшее время, сначала нужно прочитать документацию.

Что мне нужно, решение, которое подходит для моей установки, потому что у меня не осталось денег на любую другую настройку оборудования.

Спасибо за помощь.


person user1015314    schedule 20.02.2012    source источник


Ответы (2)


Hypertable — отличный выбор для обхода базы данных. Hypertable — это высокопроизводительная масштабируемая база данных с открытым исходным кодом, созданная по образцу Google Bigtable. Google разработал Bigtable специально для своей базы данных сканирования. Я рекомендую прочитать документ Bigtable, так как в качестве рабочего примера в нем используется база данных сканирования.

person Doug Judd    schedule 21.02.2012
comment
Спасибо за ваш ответ Дуг. У вас есть опыт работы с Hypertables, а также вы знакомы с некоторыми учебными пособиями, эталонными тестами и т. д., которые не размещены на hypertable.org? или code.google.com/p/hypertable всю информацию на этих двух сайтах, т.е. читай уже. Также я гуглил несколько дней и не нашел ничего полезного. Спасибо за помощь. - person user1015314; 23.02.2012
comment
руководство по гипертаблице: code.google.com/p/hypertable/wiki/HQLTutorial и вот недавний тест: highscalability.com/blog/2012/2/7/. Исходный пакет также содержит множество примеров кода. - person cruppstahl; 23.02.2012
comment
У меня есть опыт работы с Hypertable. Я написал большую часть. :) Лучше всего сначала установить его, следуя инструкциям по автономной установке: ссылка. После этого просмотрите руководство по HQL: ссылка. Я также рекомендую прочитать документы Обзор и Архитектура: ссылка. Вы также можете найти примеры кода в разделе документации. Мы отказываемся от code.google.com. - person Doug Judd; 23.02.2012
comment
Ссылки в моем предыдущем комментарии получились плохими, вот ссылки получше: Автономная установка , Учебное пособие по HQL, Обзор, Архитектура, примеры кода. - person Doug Judd; 23.02.2012
comment
Ах, круто и приятно знать, что вы написали часть, если это :-), я скоро проверю это, мне просто любопытно, как скорость по сравнению с MYSQL, например, ВЫБЕРИТЕ url FROM urls WHERE url = ' blalbla/nlafsdgdfg/1.html или с использованием подстановочного знака url = '/blalbla%' и другой важной вещи, индексы, например, в mysql мои индексы такие же большие, как данные или больше, как в гипертаблице размеры индексов. Моя база данных будет огромной, возможно, несколько ТБ. Спасибо за помощь. - person user1015314; 24.02.2012

Что касается № 4 (настройка RAID), не рекомендуется использовать RAID5 для рабочих серверов. Отличная статья об этом -> http://www.dbasquare.com/2012/04/02/should-raid-5-be-used-in-a-mysql-server/

person Dereck84    schedule 03.04.2012