Мне трудно понять, как на самом деле работают запросы для транзакций с новым режимом хранилища данных Google Firestore (я уже работал с предыдущей версией Datastore).
Согласно документации это преимущества использования Google Cloud Direbase в режиме хранилища данных:
- Возможная согласованность, все запросы Cloud Datastore становятся строго согласованными.
- Транзакции больше не ограничены.до 25 групп объектов.
- Запись в группу объектов больше не ограничивается 1 в секунду.
Поскольку запросы теперь строго согласованы, я предположил, что это будетможно использовать запросы не-предков внутри транзакции, но в документации сказано иначе:
Запросы внутри транзакций должны быть запросами-предками
Поразмыслив над этим, я решил проверить правильность своих подозрений:
query := datastore.NewQuery("Entity").Filter("indexed_property =", s)
ctx := context.Background()
tx, err := client.NewTransaction(ctx, datastore.ReadOnly)
if err != nil {
fmt.Pritnln(err)
}
query = query.Transaction(tx)
it := d.client.Run(ctx, query)
e := new(Entity)
_, err = it.Next(e)
if err != nil || err == iterator.Done {
fmt.Println(err)
}
К моему удивлению, это сработалобезотказно.Так это ошибка или правильное поведение?