Objectify - проверить, существует ли объект, используя только ключ?
Я хочу проверить, существует ли объект в хранилище данных. Я знаю его ключ. Я делаю это прямо сейчас, загружая весь объект:
public boolean doesObjectExist(String knownFooId) {
Key<Foo> key = Key.create(Foo.class, knownFooId);
Foo foo = ofy().load().key(key).now();
if (foo != null) {
// yes it exists.
return true;
}
return false;
}
Это должно стоить 1 операцию чтения из хранилища данных. Есть ли способ сделать это без загрузки всего объекта, который может быть дешевле? Другими словами, как это обойдется всего в 1 "маленькую" операцию?
Спасибо
2 ответа
Там нет способа сделать это дешевле.
Даже если вы просто делаете запрос только по ключам, запрос равен 1 операции чтения + 1 небольшая операция для каждого выбранного ключа. ( https://cloud.google.com/appengine/pricing)
Продолжайте делать ключ, который только 1 Чтение.
public boolean doesObjectExist(String knownFooId) {
Key<Foo> fooKey = Key.create(Foo.class, knownFooId);
Key<Foo> datastoreKey = ofy().load().type(Foo.class).filterKey(fooKey).keys().first().now();
return datastoreKey.equals(fooKey);
}
Из документации:
Ключи QueryKeys ()
Переключение на запрос только ключей. Ответы только на ключи выставляются как "второстепенные операции с хранилищами данных", которые выполняются быстрее и бесплатнее по сравнению с извлечением целых объектов.
Вы можете попытаться получить ключ, насколько я понимаю, это будет только небольшая операция.
// You can query for just keys, which will return Key objects much more efficiently than fetching whole objects
Iterable<Key<F>> allKeys = ofy().load().type(Foo.class).filter("id", knownFooId).keys();
Он должен работать. Также взгляните на документацию по объектам: https://github.com/objectify/objectify/wiki/Queries