Я не совсем уверен в своем понимании индексов.
(уровень комфорта: 87%)
Влияет ли родительское влияние на расположение индекса на планшетах BigTable. Или это чисто определяется по виду?
Мой пример:
Как правило, было бы плохой идеей индексировать свойство datetime, если вид сущности подвержен частым операциям записи.
Но если родитель является довольно равномерно распределенным случайным ключом, и маловероятно, что будет 2 сущности типа Proposed (), которые имеют одного и того же родителя, у меня все еще будет проблема с монотонным возрастающим индексом создание значений горячих точек ?
(я использую App Engine Standard, Python 2.7.)
« ''
# ... У меня есть такой вид сущности:
class Proposed(ndb.Model):
foo = ndb.StringProperty(indexed=True, default=None)
bar = ndb.IntegerProperty(indexed=True, default=0)
date = ndb.DateTimeProperty(indexed=True, auto_now_add=True)
#… create a randomly distributed key
random_id = int(random.uniform(0, 9999999999999999))
parent_key = ndb.Key(‘Papa', random_id)
#…I parent the entity to the random key
p = Proposed(parent=parent_key)
p.foo = ‘a ball of string’
p.bar = 42
p.put()
#…and I query using inequality filter
q = Proposed.query(ndb.AND(Proposed.bar == 42,
Proposed.date >= start_date,
Proposed.date < end_date))
« ''
Документы, которые, казалось, указывали на это (предковое) решение:
https://cloud.google.com/appengine/articles/indexselection
Описывает иерархию индексов.
https://cloud.google.com/appengine/docs/standard/python/datastore/indexes#index-definition-structure
"Строки таблицы индекса сначала сортируются по предку, а затем по значениям свойств в порядке, указанном в определении индекса."
https://cloud.google.com/datastore/docs/best-practices#high_readwrite_rates_to_a_narrow_key_range
"Избегайте высоких скоростей чтения или записи для ключей Cloud Datastore, которые лексикографически близки.
Облачное хранилище данных основано на базе данных Google NoSQL Bigtable и зависит от характеристик производительности Bigtable. Большие таблицы масштабируются путем разбиения рядов на отдельные планшеты, и эти ряды лексикографически упорядочены по ключу "
Альтернативные решения:
1) Создайте строковое свойство datetime с добавленным случайным хешем.
2) Создайте строку даты и времени с обратным порядком: миллисекунда: секунда: минута: час день: месяц: год
Я вижу, как эти решения могут работать, запрашивая фильтр равенства, однако я буду использовать фильтр неравенств по датам, и я не вижу, как запросить диапазон дат с помощью этого метода.
Смиренное Спасибо!