Открытый блог [текущая версия 1.9.1] Скачать



Счётчики

Рейтинг@Mail.ru

База данных MySQL c 1 миллиардом (1000000000) записей (mysql 1 billion rows)
Для создания такой гигантской базы данных нам потребуется:
1) Свободный компьютер с установленными на него Apache+PHP+MySQL+phpMyAdmin
я использовал XAMPP for Linux система lubuntu 11.04
2) >50 гигабайт свободного места
3) 24 часа времени на заполнение базы данных.
 
Создадим простейшую таблицу:
SQL
CREATE TABLE IF NOT EXISTS `tbl` (
  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  `date` datetime NOT NULL,
  `value` double NOT NULL,
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=0;

Для заполнения базы данных напишем на PHP простейший скрипт:


PHP
<?
set_time_limit(0);
ini_set('max_execution_time',0);
 
define ("MYSQL_HOST"    ,'192.168.1.37');
define ("MYSQL_LOGIN"   ,'db-login');
define ("MYSQL_PASSWORD",'db-password');
define ("MYSQL_DATABASE",'big');
 
@mysql_connect(MYSQL_HOST, MYSQL_LOGIN, MYSQL_PASSWORD)
  or die("Connect SQL error!");
 
@mysql_select_db(MYSQL_DATABASE)
  or die("Select DB error!");
 

while(true) {
 
$pkt='';
for ($a=0; $a<1000; $a++)
{
$value=rand(0,32000);
$pkt.= '(NULL,NOW(),'.$value.'), ';
}
$value=rand(0,32000);
$sql = "INSERT INTO `tbl` VALUES ".$pkt." (NULL,NOW(),".$value.");";
$result = mysql_query($sql);
}
?>

Запускаем этот скрипт и переодически проверяем в phpMyAdmin количество записей в таблице.
 
Вот что в результате у нас должно получится:
 

 

Теперь главный вопрос - зачем это нужно? WellCheerfullyWell
прежде всего мне хотелось проверить скорость работы нынче модного фейка MySQL бесплатной базы данных MariaDB но не имея опорных данных для теста (и ещё MariaDB у меня почему то не захотела ставится, в конце инсталляции постоянно возникали ошибки с правами доступа) выбор пал на MySQL
 
С первого взгляда понятно что база не оптимальна и убога, запрос вида
SQL
SELECT count(*) FROM `tbl` WHERE 1
выполняется уже 30 минут и конца этому процессу не видно. согласно многим утверждениям Oracle с использованием "портиций" должен быстрее справляться с такими запросами, но я пока в этом не уверен. Во общем у нас получился очень тормозной телефонный справочник индии =). что тестировать дальше пока неясно. но главное одно рубеж в 1000000000 записей преодолён.
P.S. также не стоит забывать что тормознутось запросов вызвана и очень малым количеством оперативной памяти всего 2 гигабайта., и логично предположить что если вся база а это чуть более 50 гигабайт была бы загружена в память и ENGINE=Memory то скорость возросла бы 10 раз. Это можно было бы проверить с помощью MySQL Benchmark Suite но мне некогда этим заниматься.

Имя *
E-Mail
Комментарий *
Введите защитный код*    109    

Ваш комментарий будет первым!






Copyright (c) by Zager V.B. Dubna 2006-2011 ®



Powered by OpenBlog 1.9.1 © 2008-2009 by Zager V.B.