Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: базы данных
Войти
Регистрация
Восстановить пароль
 
Lupti_Du
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 8
#1

Добавить 5 млн записей в БД за секунды PosgreSQL

28.10.2016, 11:10. Просмотров 140. Ответов 0
Метки нет (Все метки)

Есть задание "Добавить 5 млн записей в БД за секунды".

База данных PosgreSQL.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
 
 
$time_start = microtime(true);
ini_set('max_execution_time', 300);
 
require_once 'db-config.php';
 
 
function generateString($length = 15)
{
  $chars = 'qwertyuioplkjhgfdsazxcvbnm';
  $numChars = strlen($chars);
  $string = '';
  for ($i = 0; $i < $length; $i++)
  {
    $string .= substr($chars, rand(1, $numChars) - 1, 1);
  }
  return $string;
}
 
 
 
$fileName = fopen("users.csv", 'a');
 
 
for ($i=0; $i < 1000000 ; $i++)
{
    $firstName = generateString(15);
    $lastName = generateString(15);
    $age = rand(10, 90);
    fputcsv($fileName, [$firstName, $lastName, (string)$age]);
}
 
fclose($fileName);
 
$sql = "COPY users FROM '/home/artur/Documents/Projects/test.com/users.csv' CSV;";
$stmt = $pdo->prepare($sql);
$stmt->execute();
 
$time_end = microtime(true);
$time = $time_end - $time_start;
 
echo "Done! ({$time} seconds)";
 
// Count 10 000
// 28 first
// 26.6 with prepare statements
// Count 100 000
// 1.71 with loop 'for'
// 1.75 with generators
// Count 1 000 000
// 16.92 with loop 'for'
// 17.58 with generators
// Count 1 000 000
// 17.15 fsync = on
// 17.17 fsync = off
?>
<br>
<a href="delete.php">Truncate table and delete csv file</a>
Путем добавления в БД с помощью загрузки файла уменьшил время до полторы минуты.

Пробовал использовать генератор вместо обычного цикла ( только увеличило время )

Пробовал отключать fsync и full_page_writes ( ничего не поменялось ) В настройках конфигурации же это отключать нужно, правильно?

Какие еще есть способы уменьшить время загрузки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2016, 11:10
Ответы с готовыми решениями:

Оптимизация запроса без Join в таблице с 4 млн записей
Добрый день, друзья. Прошу помощи в оптимизации следующего запроса. Упростил как мог, оставив...

Как перевести секунды в часы, минуты, секунды?
как перевести секунды в часы, минуты, секунды ----- например у меня есть переменная : $time...

Работа с большой базой (>1 млн записей)
Товарищи, помогите! Я недавно перешел на C# 2005, меня особенно интересует вопрос работы с...

Оптимизация запросов. 3,5+ млн записей в базе. Надо посчитать записи.
И так, сабж. Есть таблица с более чем 3-мя миллионами записей. Выборка делается по примерно 6-ти...

Создание скрипта, который запишет в таблицу 10 млн записей с Guid
Помогите создать на SQL такой скрипт, который запишет в таблицу 10 млн записей с Guid.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2016, 11:10

Посоветуйте как лучше реализовать обработку порядка 100 млн. записей
Основная суть вопроса в самой теме. Исходные данные в СSV файлах с количеством записей от 5 000 до...

В Англії проживає 50 млн. чоловік, у Франції 70 млн. чоловік, у Німеччині - 44 млн. чоловік,
В Англії проживає 50 млн. чоловік, у Франції 70 млн. чоловік, у Німеччині - 44 млн. чоловік, у...

Файлы posgresql
пользуюсь pgAdmin III, мне нужно что бы в базе был файл(формат файла может быть любой), реально ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru