Сегментирование (базы данных)
Сегментирование (англ. sharding) — подход, предполагающий разделение баз данных, отдельных её объектов или индексов поисковых систем на независимые сегменты, каждый из которых управляется отдельным экземпляром сервера базы данных, размещаемым, как правило, на отдельном вычислительном узле.
В отличие от секционирования, предполагающего раздельное хранение частей объектов базы данных под управлением единого экземпляра СУБД, сегментирование позволяет задействовать технику распределённых вычислений, но при этом более сложно в реализации, так как требует обеспечения координации множества экземпляров таким образом, чтобы взаимодействие со всей совокупностью сегментов велось как с единой базой данных.
Некоторые данные в базе могут присутствовать во всех сегментах, а некоторые могут находиться только в одном или нескольких сегментах. Например, небольшие таблицы, используемые в качестве медленно меняющихся измерений, могут быть представлены в каждом сегменте полностью, а большие таблицы фактов равномерно разбиты по какому-либо ключу по сегментам. Наличие часто используемых данных во всех сегментах позволяет более эффективно выполнять операции соединения с ними, при этом требуется обеспечение синхронного их обновления на всех сегментах.
Техника сегментирования широко используется в NoSQL-СУБД (таких, как Cassandra, Couchbase, MongoDB), массово-параллельных аналитических СУБД (Teradata Database, Netezza, Greenplum), горизонтально-масштабируемых поисковых системах (Elasticsearch, Solr). Также техника реализована в некоторых традиционных реляционных СУБД (опция Sharding в Oracle Database). Для СУБД, не поддерживающих сегментирование, для реализации подобной техники организуется маршрутизация запросов к нескольким экземплярам СУБД со стороны приложения; существует несколько проектов связующего программного обеспечения, реализующего прозрачное сегментирование (dbShards, Apache ShardingSpshere, ScaleArc, MaxScale для MariaDB).
Литература
править- Andrew Pavlo, Matthew Aslett. What’s Really New with NewSQL?. — 2016. — Т. 45, № 2. — С. 45—55. — doi:10.1145/3003665.3003674.