Партиции mysql

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


Типы Разбиения
 
RANGE partitioning: назначает строки разделам, основанным на значениях столбца, попадающих внутрь заданного диапазона.
LIST partitioning: подобно выделению разделов диапазоном, за исключением того, что раздел выбран основанным на столбцах, соответствующих одному из набора дискретных значений.
HASH partitioning: раздел выбран основанным на значении, возвращенном определяемым пользователем выражением, которое функционирует на значениях столбца в строках, которые будут вставлены в таблицу. Функция может состоять из любого выражения, допустимого в MySQL, которое выдает не отрицательное целочисленное значение.
KEY partitioning: подобно выделению разделов hash, за исключением того, что обеспечены только один или большее количество столбцов, которые будут оценены, и сервер MySQL обеспечивает собственную хэш-функцию. Эти столбцы могут содержать не целочисленные значения, так как хэш-функция, обеспеченная MySQL, гарантирует целочисленный результат, независимо от типа данных столбца.


От слов к практике. На примере Таблица разбитая на 2 раздела с типом LIST



CREATE TABLE 'contact` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`created` DATETIME NOT NULL,
	`text1` VARCHAR(20) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
	`text2` VARCHAR(20) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
	`file_name` VARCHAR(40) NOT NULL COLLATE 'utf8mb4_unicode_ci',
	`pn` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1',
	PRIMARY KEY (`id`,`pn`) USING BTREE,
	INDEX `file_name_idx` (`file_name`) USING BTREE
)

				 
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB
AUTO_INCREMENT=3794499

/*!50100 PARTITION BY LIST (pn)
(PARTITION p0 VALUES IN (0) ENGINE = InnoDB,
 PARTITION p1 VALUES IN (1) ENGINE = InnoDB)  */;


Тут стоит обратить внимание  на строчку PRIMARY KEY (`id`,`pn`) USING BTREE,
Если не добавить в PRIMARY KEY столбец pn то ничего не выйдет.


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

ALTER TABLE  contact TRUNCATE PARTITION p0;

Которая за 1 сек может удалить миллионы строк (по сути удаляет файл) из партиции p0


На физ уровне будет два файла таблицы:
contact#P#p0.ibd
contact#P#p1.ibd


Хорошая документация тут http://www.rldp.ru/mysql/mysqlpro/parts.htm


Кстати, update по столбцу  pn происходит очень долго, и после такого апдейта команда 
ALTER TABLE  contact TRUNCATE PARTITION p0;
тоже происходит не мгновенно



Рецепт разбора SOAP ответа

Проблема: бывает так, что при вызове soap, ответ на стороне клиента не собирается в объект, это может быть и из-за wsdl или из-за неверного ответа от сервер.

Решение: распарсить ответ от сервере как XML

// выполняем функцию SOAP
$response = $this->client->__soapCall("getParam", $param);

// костыль, так как первый response ничего не вернул, будем тупо парсить  XML ответ
$response = $this->client->__getLastResponse();

// xml парсеру не нравится тег с неймспейсами, вырезаем их
$response = str_ireplace(array('soapenv:', 'tem:', 'SOAP-ENV:', 'rpc:'), '', $response);
$xml = simplexml_load_string($response, "SimpleXMLElement", LIBXML_NOCDATA);

$json = json_encode($xml);
$arrayResponse = json_decode($json,TRUE);

Если есть ошибка при разборе, можно поиграть с параметрами

$xml = simplexml_load_string($response, «SimpleXMLElement», LIBXML_COMPACT | LIBXML_PARSEHUGE);

Асинхронное выполнение кода PHP (нет)

В книге «Symfony 5. Быстрый старт» есть хороший пример, когда нам надо выполнить какие то долгие действия  (отправить почту, вызвать сторонний API) но не заставлять пользователя ждать. Для этого используется очередь. Мы в очередь записываем действие, сразу отправляем ответ пользователю а дальше уже, в другом скрипте делаем задачи из очереди.

Но если по каким то причинам, вы не можете поставить rabbitmq или вам это будет «ДОРОГО», считай излишни, можно обойтись таким асинхронным выполнением. Суть его в том, что все действия делаем быстро, отдаем ответ клиенту, а потом уже, когда он отключился, продолжаем выполнять свои задачи:

<?php

// Игнорирует отключение пользователя 
ignore_user_abort(true);
//позволяет скрипту быть запущенным постоянно
set_time_limit(0);

// старт буфиризации
ob_start();
// вывести результат в буфер
echo $result;
$length = ob_get_length();


header('Connection: close');
header("Content-Length: " . $length);
header("Content-Encoding: none");
header("Accept-Ranges: bytes");
// отключаем буфиризацию
ob_end_flush();
// сбросить (отправить) буфер вывода
ob_flush();
// сброс системного буфера вывода
flush();


// а вот тут уже делаем все остальное

По такому принципу у меня работает Telegram бот, он на входе принимает сообщение с внешнего источника, и тут же отключает этот источник от себя, а уже дальше отправляет сообщение в телегу

Yandex поступает подло

Уже с месяц Яндекс блокирует строку поиска для тех, у кого включена блокировка Яндекс метрики. Выглядит это вот так:

ya1

 

Довольно подло. Стоит отключить блокировщик, как все работает

ya2

 

Мы не гордые, пойдем в гугл.

 

Symfony 5. Быстрый старт | Fabien Potencier

  • Fabien Potencier
  • Symfony 5. Быстрый старт
  • ISBN-13: 978-2-918390-42-8

 

222

 

Зашла легко и быстро, меньше чем за день.

В книге много чего поверхностного, и после каждой главы еще по 3-7 ссылок для дальнейшего обучения. Но приятно то, что книга свежая, про Symfony5 рассказывает, и что на профессиональном уровне, а не вот это — а сейчас мы напишем Hello world

 

Знал, но хорошо освежил в памяти

  • EasyAdmin
  • API Platform

А вот это для меня было новое

  • SPA  —  JavaScript Single Page Application ( Preact и Symfony Encore. )
  • Apache Cordova

 

Джон Кехо «Подсознание может всё!»

  • Джон Кехо
  • Подсознание может всё!
  • ISBN: 978-985-15-2314-2

 

147579-dzhon-keho-podsoznanie-mozhet-vse

 

Вот это действительно клевая книга, хотя я проверю истории, про которые говорит автор.

Суть книги очень проста — мысли позитивно. И это мне подходит.