зеркало из
				https://github.com/iharh/notes.git
				synced 2025-11-03 23:26:09 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			52 строки
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			52 строки
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
pg_pathman
 | 
						||
https://habrahabr.ru/company/oleg-bunin/blog/336610/
 | 
						||
 | 
						||
**********************************************************************
 | 
						||
Секционирование - разбиение одной большой таблицы на более мелкие сегменты (секции). Само секционирование прозрачно для пользователя и приложения, работающего с PostgreSQL. Для них таблица кажется как и раньше целой.
 | 
						||
 | 
						||
Существует несколько подходов к секционированию:
 | 
						||
 | 
						||
1️⃣ Наследование таблиц.
 | 
						||
 | 
						||
При создании таблицы, мы указываем ей, что она наследуется от другой (родительской) таблицы. Здесь у нас получается две таблицы, но данные в них связаны между собой.
 | 
						||
 | 
						||
2️⃣ Декларативное наследование.
 | 
						||
 | 
						||
Это более продвинутый и гибки вид секционирования. Таблица объявляется секционированной декларативно, а само секционирование настраивается согласно определенному методу (о методах ниже).
 | 
						||
 | 
						||
Механизм секционирования эволюционирует с каждой версией PostgreSQL. Декларативное секционирование появилось в 10й версии PostgreSQL, до этого было только наследование таблиц, и получило большое развитие в 11й версии. В 12й и следующих версиях PostgreSQL механизм декларативного секционирование продолжил развиваться и улучшаться.
 | 
						||
 | 
						||
Секционирование таблиц лучше применять на этапе проектирования базы данных, потому что потом это сделать будет гораздо сложнее.
 | 
						||
 | 
						||
На сколько должна быть большой таблица, чтобы задуматься о секционировании? Если вы считаете, что у вас в базе будет таблица, чей объём превышает объём оперативной памяти сервера, то тут уже можно начать думать о ее секционировании. На небольших таблицах секционирование может оказаться избыточным или не приносить ощутимых преимуществ.
 | 
						||
 | 
						||
➕ Плюсы секционирования:
 | 
						||
 | 
						||
✅ Самое очевидное преимущество секционирования состоит в том , что мы можем, например, секцию таблицы с какими-то архивными данными положить на более медленные диски, а секцию с оперативными данными на более быстрые. Т.е. мы можем секции таблицы поместить в разные табличные пространства, в зависимости от данных, хранящихся в них;
 | 
						||
 | 
						||
✅ Ускорение массовой загрузки или удаления данных. Мы можем добавлять отдельные секции таблицы или удалять их с помощью команд ATTACH/DETACH, что позволит значительно ускорить данные операции;
 | 
						||
 | 
						||
✅ Повышение производительности запросов. Если выбираемые в запросе данные попадут в одну секцию таблицы, то PostgreSQL не придется их искать по всей таблице, что может существенно повысить производительность запроса.
 | 
						||
 | 
						||
➖ Минусы секционирования:
 | 
						||
 | 
						||
✅ Усложнение структуры базы данных. Каждая секция таблицы для PostgreSQL будет считаться отдельной таблицей, хотя она и является частью одной логической таблицы;
 | 
						||
 | 
						||
✅ Преобразовать существующую таблицу в секционированную и наоборот нельзя. Однако, можно добавить обычную или секционированную таблицу в качестве секции, или удалить секцию и превратить ее в обычную таблицу.
 | 
						||
 | 
						||
Методы декларативного секционирования:
 | 
						||
 | 
						||
✅ Секционирование по диапазонам. 
 | 
						||
 | 
						||
Таблица секционируется по «диапазонам», которые не пересекаются друг с другом. Например, это могут быть диапазоны дат, или идентификаторы первичного ключа. Границы каждого диапазона считаются включающими нижнее значение и исключающими верхнее. Т.е., если для первой секции задан диапазон значений от 1 до 10, а для второй — от 10 до 20, то значение 10 относится ко второй секции, а не к первой.
 | 
						||
 | 
						||
✅  Секционирование по списку.
 | 
						||
 | 
						||
Таблица секционируется по определенному списку значений, в котором явно указывается какие значения должны относиться к определённой секции.
 | 
						||
 | 
						||
✅ Секционирование по хешу.
 | 
						||
 | 
						||
Таблица секционируется по определённым модулям (modulus) и остаткам (remainder), которые указываются для каждой секции. Каждая секция содержит строки, для которых хеш-значение ключа разбиения, делённое на модуль, равняется заданному остатку.
 | 
						||
 | 
						||
Это краткое введение в секционирование таблиц в PostgreSQL. В будущих постах будем погружаться в эту тему глубже и переходить к практике.
 |