Сокращение операций записи в хранилище данных - PullRequest
1 голос
/ 03 апреля 2012

Я создаю веб-сканер на Google App Engine.Чтобы сохранить просканированную информацию в хранилище данных, я использую следующее поле, используя JDO.Код выглядит следующим образом:

public class LinkInfo
{
   @PrimaryKey
   @Persistent private String id;

   @Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
   @Persistent private int linkNo;

   @Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
   @Persistent private String link;

   @Persistent private int version;

   @Persistent private String fetchDate;

   @Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
   @Persistent private long fetchTime;

   @Persistent private String nextFetch;

   @Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
   @Persistent private String pageCreationDate;

   @Persistent private int retries;

   @Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
   @Persistent private int retryInterval;

   @Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
   @Persistent private int outLinks;

   @Persistent private float score;

   @Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
   @Persistent private String abstractContent;

   @Persistent private String contentType;

   @Persistent private String parent;

   @Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
   @Persistent private String title;

       ...

Из 16 полей я сделал 8 неиндексированных, потому что мне не нужно их фильтровать или сортировать.Даже сейчас я превышаю лимит операций записи в хранилище данных.

Любые предложения по сокращению с помощью "Операции записи в хранилище данных"?

Ответы [ 2 ]

6 голосов
/ 06 августа 2014

Из Google App Engine:

Для каждого нового положенного объекта:

"2 записи + 2 записи на каждое индексированное значение свойства + 1 запись на составное значение индекса."

Таким образом, для каждой сущности у вас будет 2 + 2 * 8 + (сколько у вас есть пользовательских индексов).

Это минимум 18 для каждой сущности.

Лучший способ уменьшить количество записей - это уменьшить количество проиндексированных свойств.

1 голос
/ 03 апреля 2012

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

Единственное, что я хотел бы предложить, это полностью отключить JDO и просто записать данные в хранилище данных через собственный API, чтобы действительно оптимизировать ваши записи, если JDO требует более пары операций для сохранения объекта, но на самом деле это не должно быть намного хуже, чем ты мог бы сделать сам.

...