Команда ReQL: rebalance
Синтаксис команды
table.rebalance() → object database.rebalance() → object
Описание
Перебалансирует фрагменты таблицы. При вызове для базы данных, все таблицы в этой базе данных будут перебалансированы.
Команда rebalance работает, измеряя распределение первичных ключей в таблице и выбирая точки разбиения, которые обеспечат приблизительно одинаковое количество документов в каждом фрагменте. Она не изменит количество фрагментов в таблице или любые другие конфигурационные аспекты таблицы или базы данных.
Таблица временно потеряет доступность после вызова rebalance; используйте команду wait, чтобы подождать, пока таблица снова станет доступной, или команду status, чтобы проверить, доступна ли таблица для записи.
RethinkDB автоматически перебалансирует таблицы при увеличении количества фрагментов, и если ваши документы имеют равномерно распределенные первичные ключи (например, по умолчанию UUID), вряд ли потребуется вручную вызывать rebalance. Случаи, когда необходимо вызвать rebalance, включают:
- Таблицы с неравномерно распределенными первичными ключами, такими как возрастающие целые числа
- Изменение типа первичного ключа таблицы
- Увеличение количества фрагментов пустой таблицы, а затем использование первичных ключей, отличных от UUID, в этой таблице
Используйте веб-интерфейс веб-интерфейс (и команду info), чтобы узнать, когда фрагменты таблицы требуют перебалансировки.
Результат выполнения rebalance — это объект с двумя полями:
-
rebalanced: количество перебалансированных таблиц. -
status_changes: список новых и старых значений статуса таблицы. Каждый элемент списка будет объектом с двумя полями:-
old_val: Значение статуса таблицы до выполненияrebalance. -
new_val: Значение статуса таблицы после выполненияrebalance. (Это значение почти всегда указывает на недоступность таблицы.)
-
Для объяснения объектов, возвращаемых в полях old_val и new_val, см. команду status.
Пример: Перебалансировка таблицы.
r.table('superheroes').rebalance().run(conn)
Пример возвращаемого значения:
{
:rebalanced => 1,
:status_changes => [
{
:old_val => {
:db => "database",
:id => "5cb35225-81b2-4cec-9eef-bfad15481265",
:name => "superheroes",
:shards => [
{
:primary_replica => "jeeves",
:replicas => [
{
:server => "jeeves",
:state => "ready"
}
]
},
{
:primary_replica => "jeeves",
:replicas => [
{
:server => "jeeves",
:state => "ready"
}
]
}
],
:status => {
:all_replicas_ready => true,
:ready_for_outdated_reads => true,
:ready_for_reads => true,
:ready_for_writes => true
}
},
:new_val => {
:db => "database",
:id => "5cb35225-81b2-4cec-9eef-bfad15481265",
:name => "superheroes",
:shards => [
{
:primary_replica => "jeeves",
:replicas => [
{
:server => "jeeves",
:state => "transitioning"
}
]
},
{
:primary_replica => "jeeves",
:replicas => [
{
:server => "jeeves",
:state => "transitioning"
}
]
}
],
:status => {
:all_replicas_ready => false,
:ready_for_outdated_reads => false,
:ready_for_reads => false,
:ready_for_writes => false
}
}
}
]
}
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/ruby/rebalance/