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

Другие вопросы по тегам