Преимущества использования незашифрованного ключа по сравнению с настоящим ключом? - PullRequest
2 голосов
/ 28 апреля 2010

Я читаю документы по генерации ключей в движке приложения. Я не уверен, какой эффект имеет использование простого ключа String над реальным ключом. Например, когда мои пользователи регистрируются, они должны предоставить уникальное имя пользователя:

class User {
   /** Key type = unencoded string. */
   @PrimaryKey
   private String name;
}

Теперь, если я правильно понимаю документы, я все равно смогу сгенерировать именованные ключи и группы сущностей, используя это, верно?

// Find an instance of this entity:
User user = pm.findObjectById(User.class, "myusername");

// Create a new obj and put it in same entity group:
Key key = new KeyFactory.Builder(
  User.class.getSimpleName(), "myusername")
    .addChild(Goat.class.getSimpleName(), "baa").getKey();
Goat goat = new Goat();
goat.setKey(key);
pm.makePersistent(goat);

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

Есть ли выигрыш в производительности при использовании ключа? Должен ли я обновить до:

class User {
   /** Key type = unencoded string. */
   @PrimaryKey
   private Key key;
}

// Generate like:
Key key = KeyFactory.createKey(
    User.class.getSimpleName(), 
    "myusername");
user.setKey(key);

это почти то же самое, я все равно просто генерировал бы Ключ, используя уникальное имя пользователя,

Спасибо

1 Ответ

3 голосов
/ 29 апреля 2010

Когда вы указываете строковый ключ, как в своем примере, вы указываете имя ключа (см. документы ). Таким образом, вы не должны использовать KeyFactory - просто установите поле ключа как «myusername».

Между этими двумя вариантами нет разницы в производительности: внутренне они хранятся одинаково; имя ключа будет проще использовать, если вы не используете родительские объекты для этой модели.

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