Google Cloud Datastore - Масштабируемость индексации короткого списка перечислений - PullRequest
0 голосов
/ 18 февраля 2019

Является ли проблемой в Datastore индексирование свойства, которое может иметь только 4-5 возможных значений?Приведет ли это к «горячим точкам» планшета?

Я думаю о свойстве с перечислением строковых значений, таких как «выполнено», «работает», «завершено».Причиной индексации такого свойства будет то, что вы можете создать составной индекс, который позволит вам запрашивать, например, все объекты, которые «выполнены».

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

TLDR: масштабируется до тех пор, пока ключи сущностей разбросаны.

DR:

Сначала рассмотрим записываемые записи индекса.

У нас есть что-то вроде:

SomeKind\E1 -> FullEntityKey1
SomeKind\E2 -> FullEntityKey2
SomeKind\E2 -> FullEntityKey3
SomeKind\E3 -> FullEntityKey4

Мы отмечаем, что каждый отдельный индексный указатель указывает на некоторую сущность.

Что касается разделения нагрузки, то значение сегментируемого значения выглядит следующим образом:

SomeKind\E1\FullEntityKey1
SomeKind\E2\FullEntityKey2
SomeKind\E2\FullEntityKey3
SomeKind\E3\FullEntityKey4

Теперь давайте представим, что мы использовали случайно назначенные идентификаторы для ключей объекта (диапазон [0,2], чтобы быть простым) - мы предполагаем равномерное распределение записей по случайным идентификаторам сущностей.

SomeKind\E1\0\RestOfKey1
SomeKind\E2\0\RestOfKey2
SomeKind\E2\1\RestOfKey3
SomeKind\E3\2\RestOfKey4

И затем мы можем заметить, что существуют четкие точки разделения для нагрузки, которую нужно разделить - то естькаждый из [0,2] возможных случайных идентификаторов является осколком, и система может масштабироваться до бесконечности, пока записи равномерно распределяются по всем значениям в записанном SomeKind (увеличьте случайный идентификатор для большего количества точек разделения / масштабирования)

Таким образом, масштабирование / «горячая точка» перечисляемого значения индекса тесно связано с индексируемыми ключами сущности, которые обычно создаются способами, которые можно использовать, что означает, что соответствующие записи индекса также являются.

Это не означает, что невозможно создавать ситуации, в которых горячие точки могут возникать (например, если ключи сущностей имеют монотонно увеличивающееся значение (например, метка времени)), илинацелив небольшой раздел ключей на очень высокую скорость записи - но это не должно происходить по умолчанию с типичными шаблонами трафика и ключами сущностей.

0 голосов
/ 19 февраля 2019

Да, это будет проблемой, если / когда у вас высокий уровень запросов с использованием указанных вами составных индексов, перечисленных в Индексы :

  • Несвойства индекса с монотонно увеличивающимися значениями (например, отметка времени NOW()).Поддержание такого индекса может привести к появлению горячих точек, которые влияют на задержку Cloud Datastore для приложений с высокой скоростью чтения и записи.Для получения дополнительных рекомендаций по работе с монотонными свойствами см. Высокие скорости чтения / записи для узкого диапазона клавиш ниже.

У вас также может возникнуть проблема с горячей точкой планшета, если /когда вы достигаете высоких показателей записи в хранилище данных для сущностей с одинаковым значением свойства (например, для сотен сущностей становится done в секунду) - еще один аспект этой проблемы.Этот случай упоминается в Высокие скорости чтения / записи в узком диапазоне ключей :

  • Эта проблема также возникнет, если вы создадите новые объекты с высокой скоростью смонотонно увеличивающееся индексированное свойство, такое как отметка времени, потому что эти свойства являются ключами для строк в индексных таблицах в Bigtable.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...