Горизонтальная шкала в хранилище данных GAE NDB

Я пытаюсь понять, как структурировать ключи, чтобы данные, хранящиеся в хранилище данных GAE NDB, масштабировались горизонтально. Чтобы принять конкретный сценарий, я хотел бы убедиться, что в многопользовательском приложении данные арендатора разделяются таким образом, что нет никаких горячих точек по мере роста числа арендаторов.

Учитывая простую модель, например

class Tenant(ndb.Model):
 name = ndb.StringProperty (required = True, indexed = True)
 timestamp = ndb.DateTimeProperty(required = True, indexed = True)
 tags = ndb.StringProperty (repeated = True, indexed = True)

У нас есть контроль над тем, как данные разбиваются по узлам хранения без перекрытия (насколько это возможно)?

2 ответа

У вас нет большого контроля над этим, но несколько советов по масштабированию, связанных с хранилищем данных с высокой репликацией и очертаниями:

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

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

Я думаю, вы найдете это, и это довольно интересно. Они относятся к ключам и проблеме "горячего планшета". Не превышайте оптимизацию. В худшем случае вы можете перенести свои данные с помощью карты/сокращения или двух, однако все же важно понять эти проблемы, чтобы избежать чего-то глупого с самого начала.


Datastore делает это автоматически. Вы должны доверять Google, чтобы управлять этим в высшей степени хорошо.

licensed under cc by-sa 3.0 with attribution.