Как быть с большим объемом данных?

127
01 февраля 2021, 12:40

Имеется файл примерно на 700 000 записей, мне необходимо периодически его проверять, если есть изменения то делаю update в базу,если нет то записываю в базу. Нужно как то ускорить этот процесс. и я не понимаю как сохранять это дело в моем случаи. уперся вот на этом моменте. не судите строго я новичок. Надеюсь код лучше объяснит.

  DB::table('resources')->select('hash')->orderBy('id')->chunk(50000,
            function ($resources) use ($file, $updatedDate) {
                $lineCount = 1;
                echo 1 . '<>';
                while (!feof($file)) {

                    $line = iconv('cp1251', 'utf-8', fgets($file));
                    $csv = str_getcsv($line, ';');
                    if (count($csv) === 6) {
                        $ipPool = explode('|', $csv[0]);
                        foreach ($ipPool as $ip) {
                            $date = new \DateTime($csv[5]);
                            $hash = md5($csv[1] . $csv[2]);
                            foreach ($resources as $resource) {
                                if ($hash === $resource->hash) {
                                    DB::table('resources')->where('hash', $hash)->update([
                                        'version_date' => $updatedDate,
                                    ]);
                                    echo $lineCount++ . "<br>"  ;
                                }
                            }
                        }
                    }
                    $lineCount++;
                }
            });
Answer 1

Если весь вопрос в том что страница зависает на 1 минуту, можно сделать это асинхронно через очереди. Либо используй две таблицы в базе данных, грузи туда целиком файл, в одной таблице предыдущая версия в другой текущая, и проверяй запросом. В итоге будет меньше запросов, и все вычисления на уровне БД, должен быть приличный прирост.

READ ALSO
Не работает авторизация на php

Не работает авторизация на php

У меня не получается сделать авторизацию на сайте! Регистрирует у меня все хорошо, а вот войти на сайт не хочет! Я пользуюсь функцией md5() и у меня...

133
Как правильно создать базу данных mysql для товаров с разными свойствами и категориями

Как правильно создать базу данных mysql для товаров с разными свойствами и категориями

Помогите как правильно организовать структуру БД интернет магазина где у товаров есть разные свойства и категорииЧтобы было легче для фильтрации...

125
Авто-декремент mysql+php(автоматически)?

Авто-декремент mysql+php(автоматически)?

собственно, тут такой вопрос Есть игра(обычная текстовая html,css,php +mysql)

114
Почему не работает фон

Почему не работает фон

Получается вот что:

108