Как уменьшить количество операций записи для простого объекта?

У меня есть следующее Entity:

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "DCOL", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue("Alias")
public class Alias
{
 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Key key;
 @Basic
 private UUID from;
 @Basic
 private UUID to;
 @Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
 private Date createdOn;

 public Alias() { /* intentionally blank */ }

 public Alias(@Nonnull final UUID from, @Nonnull final UUID to)
 {
 this.key = KeyFactory.createKey(Alias.class.getSimpleName(), from.toString());
 this.from = from;
 this.to = to;
 this.createdOn = new Date();
 }
}

И вот код, который сохраняется:

final EntityManager em = EMF.TRANSACTIONS_OPTIONAL.createEntityManager();
try
{
 final Alias a = new Alias(from, to);
 em.persist(a);
}
finally
{
 em.close();
}

В настоящее время для сохранения этого Entity требуется 6 операций записи в Datastore.

Я уменьшил число от 10 до 6 путем маркировки createdOn с @Extension чтобы исключить его из автоматической индексации. Это 40% сокращение операций записи!

Есть ли способ уменьшить количество записей для чего-то такого простого?

Будет ли использование низкоуровневого API-интерфейса Datastore делать какие-либо улучшения?

1 ответ

Как вы упомянули, ваша организация требует 6 операций записи, разделенных следующим образом:

  • 1 написать для самой сущности
  • 1 напишите для встроенного индекса EntitiesByKind
  • 2 пишет для свойства from (1 для встроенного индекса EntitiesByProperty и другого для встроенного индекса EntitiesByPropertyDesc).
  • 2 пишет для свойства to (1 для встроенного индекса EntitiesByProperty и другого для встроенного индекса EntitiesByPropertyDesc).

Единственная возможность у вас есть в данный момент, чтобы уменьшить число записей маркирует любого из from или to свойствам, проиндексированные, а также (таким образом, уменьшая количество операций записи на 2 с каждой собственностью).

Вы можете увидеть дополнительную информацию здесь: https://developers.google.com/appengine/docs/java/datastore/entities#Java_Understanding_write_costs

licensed under cc by-sa 3.0 with attribution.