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