Команда ReQL: rebalance
Синтаксис команды
table.rebalance() → object database.rebalance() → object
Описание
Перебалансирует фрагменты таблицы. При вызове на базе данных все таблицы в этой базе данных будут перебалансированы.
Команда rebalance работает, измеряя распределение первичных ключей в таблице и выбирая точки разделения, которые предоставят каждому фрагменту примерно одинаковое количество документов. Она не будет менять количество фрагментов в таблице или изменять какие-либо другие параметры конфигурации для таблицы или базы данных.
Таблица временно потеряет доступность после вызова rebalance; используйте команду wait, чтобы подождать, пока таблица снова станет доступной, или status, чтобы проверить, доступна ли таблица для записи.
RethinkDB автоматически перебалансирует таблицы при увеличении количества фрагментов, и если ваши документы имеют равномерно распределенные первичные ключи (например, по умолчанию UUID), вряд ли потребуется вызывать rebalance вручную. Случаи, когда может потребоваться вызвать rebalance, включают:
- Таблицы с неравномерно распределенными первичными ключами, такими как возрастающие целые числа
- Изменение типа первичного ключа таблицы
- Увеличение количества фрагментов пустой таблицы, а затем использование не-UUID первичных ключей в этой таблице
Веб-интерфейс web UI (и команда info) может сообщить вам, когда фрагменты таблицы необходимо перебалансировать.
Результат вызова rebalance — объект с двумя полями:
-
rebalanced: количество перебалансированных таблиц. -
status_changes: список новых и старых значений статуса таблиц. Каждый элемент списка будет объектом с двумя полями:-
old_val: значение статуса таблицы status до выполненияrebalance. -
new_val: значениеstatusтаблицы после выполненияrebalance. (Это значение почти всегда будет указывать на то, что таблица недоступна.)
-
См. команду status для объяснения объектов, возвращаемых в полях old_val и new_val.
Пример: Перебалансировка таблицы.
> 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/java/rebalance/