Сегментирование (базы данных)
Сегментирование (англ. sharding) — подход, предполагающий разделение баз данных, отдельных её объектов или индексов поисковых систем на независимые сегменты, каждый из которых управляется отдельным экземпляром сервера базы данных, размещаемым, как правило, на отдельном вычислительном узле.
В отличие от секционирования, предполагающего раздельное хранение частей объектов базы данных под управлением единого экземпляра СУБД, сегментирование позволяет задействовать технику распределённых вычислений, но при этом более сложно в реализации, так как требует обеспечения координации множества экземпляров таким образом, чтобы взаимодействие со всей совокупностью сегментов велось как с единой базой данных.
Некоторые данные в базе могут присутствовать во всех сегментах, а некоторые могут находиться только в одном или нескольких сегментах. Например, небольшие таблицы, используемые в качестве медленно меняющихся измерений могут быть представлены в каждом сегменте полностью, а большие таблицы фактов равномерно разбиты по какому-либо ключу по сегментам. Наличие часто используемых данных во всех сегментах позволяет более эффективно выполнять операции соединения с ними, при этом требуется обеспечение синхронного их обновления на всех сегментах.
Техника сегментирования широко используется в NoSQL-СУБД (таких, как Cassandra, Couchbase, MongoDB), массово-параллельных аналитических СУБД (Teradata Database, Netezza, Greenplum), горизонтально-масштабируемых поисковых системах (Elasticsearch, Solr). Также техника реализована в некоторых традиционных реляционных СУБД (опция Sharding в Oracle Database). Для СУБД, не поддерживающих сегментирование, для реализации подобной техники организуется маршрутизация запросов к нескольким экземплярам СУБД со стороны приложения.