Разница между пространством имен и предком в структуре данных - PullRequest
0 голосов
/ 27 июня 2018

Какая разница между

key := datastore.NameKey("user", userID, nil)
client.Put(ctx,datastore.IncompleteKey("session",key),&sessionUser)

и

key :=&datastore.Key{Kind:"session",Parent:nil,Namespace:userID}
client.Put(ctx,key,&sessionUser)

Почему они будут разными, если они оба имеют одинаковую запись / чтение, которая может вызвать раздор Из этой статьи

Cloud Datastore добавляет пространство имен и тип корневой группы сущностей к ключу строки Bigtable. Вы можете попасть в горячую точку, если начнете писать в новое пространство имен или вид без постепенного увеличения трафика.

Я действительно запутался, как мне выставлять свои данные из-за этого, кстати, какой из них быстрее при чтении?

1 Ответ

0 голосов
/ 27 июня 2018

Разница в том, что упомянутый вами случай конфликта пространства имен только временный, эквивалентный (с точки зрения первопричины), если хотите, с этим :

...

Если вы создаете новые объекты с очень высокой скоростью для вида, который ранее было очень мало существующих организаций. Bigtable начнется со всеми сущностями на одном сервере планшета и займет некоторое время разделить диапазон ключей на отдельные планшеты.

...

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

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

Так что, если вы действительно действительно не нуждаетесь в родословной, я бы посоветовал попытаться избежать этого, если ваши ожидаемые модели использования оставят место для спора.

Примечание: эта статья касается только конфликта записи, но вы должны знать, что конфликт может возникнуть и при чтении (в транзакциях), см. Проблемы конфликта в Google App Engine . В этом случае имеет значение размер группы объектов, так как транзакция пытается заблокировать всю группу объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...