Строго только ОЗУ?


4

Мне нужно работать над проектом, который будет иметь дополнительную большую таблицу с миллиардами записей, но только два поля - это id, а другой - текст.

И идентификатор будет установлен на BIGINT и PK, тогда если для индексирования берется 8 + 2 (дополнительные 2 байта для служебных) байтов на строку, то в моих расчетах 64 ГБ ОЗУ должно быть достаточно для хранения не менее 5 миллиардов записей.

Но его единственный фактор, который я рассматриваю.

Как вы думаете, есть ли другие факторы, которые я должен учитывать?

И размер ОЗУ также может быть увеличен, если необходимо. И этот стол был бы самым занятым столом с небольшим количеством записей и большим количеством чтений.

+1

Могу ли я попросить немного больше информации об этом проекте? Для чего предназначена эта таблица? Какую проблему ты пытаешься решить? 15 сен. 112011-09-15 07:14:14

3

Вам необходимо рассмотреть механизм хранения, который вы будете использовать для своего проекта, потому что MySQL кэширует по-разному для каждого механизма хранения.

MyISAM кэширует только индексные страницы. InnoDB кэширует страницы данных и индексов.

Учитывая, что у вас есть стол с большими идентификаторами, я надеюсь, что вы используете MyISAM.

Вот запрос, чтобы помочь вам определить лучший key_buffer_size:

SELECT CONCAT(ROUND(KBS/POWER(1024, 
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999), 
SUBSTR(' KMG',IF(PowerOf1024<0,0, 
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) 
recommended_key_buffer_size FROM 
(SELECT LEAST(POWER(2,32),KBS1) KBS 
FROM (SELECT SUM(index_length) KBS1 
FROM information_schema.tables 
WHERE engine='MyISAM' AND 
table_schema NOT IN ('information_schema','mysql')) AA) A, 
(SELECT 2 PowerOf1024) B; 

Это даст рекомендуемое значение для MyISAM Key Cache (key_buffer_size), задаваемый текущий набор данных (the query will cap the recommendation at 4G (4096M). Для 32-битной ОС, 4 Гб это предел. Для 64-битной, 8 Гб.

UPDATE 2011-09-16 14:49 EDT

Если вы используете InnoDB, загрунтовка key_buffer_size не поможет. InnoDB and MyISAM cache differently.

Вот тот же вид запроса к размеру вашего InnoDB буферного пула:

SELECT CONCAT(ROUND(KBS/POWER(1024, 
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999), 
SUBSTR(' KMG',IF(PowerOf1024<0,0, 
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size 
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables 
WHERE engine='InnoDB') A, 
(SELECT 2 PowerOf1024) B; 
  0

Интересно, что я думаю об использовании InnoDB, потому что он работает лучше под нагрузкой. Итак, что я узнал из вашего ответа, так это то, что достаточно кеша ключей. Размер ББ не имеет значения? 16 сен. 112011-09-16 16:56:43

  0

Я обновил свой ответ на адрес с помощью InnoDB 16 сен. 112011-09-16 18:49:40

  0

Но как вы упомянули, максимальная кепка составляет 8 ГБ для MyISAM, то это означает, что за пределами этого ресурса RAM не будут эффективно использоваться? {Извините, что слишком поздно задали этот вопрос ..} 01 окт. 112011-10-01 22:14:09

+1

@Gary: Вы правы. Память, выделенная выше 8 ГБ для key_buffer_size, теряется. Это очень важно, поскольку для MyISAM кэшируются только страницы индекса. Вы можете создавать ключевые кеши, предназначенные для определенных таблиц MyISAM: http://dev.mysql.com/doc/refman/5.5/en/cache-index.html 01 окт. 112011-10-01 22:41:42