1

Я создаю веб-гусеничный механизм 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 undindexed, потому что не нужно фильтровать или сортировать их. Даже сейчас я превысил лимит операций с хранилищем данных.

Любые предложения по сокращению на «Операции записи хранилища данных»?

ответ

1

Существует не так много, чтобы уменьшить количество записей ... при условии, что вы не обновляете данные очень часто. Это означает, что вы можете оптимизировать кеширование. На основе вашего примера это довольно прямая таблица, нет объединений, поэтому, если вы просто храните данные там, мало что можете сделать. Вы видите больше, чем несколько записей на запись при сохранении данных?

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

+0

Я вижу почти 2500 операций на 80 позиций. У JDO и собственного кода API есть разница в отсутствии операций записи? Я хотел бы узнать больше об этом. Но я согласен, что Native API быстрее, чем JDO, в то время как JDO более прост в использовании, в соответствии с этим обсуждением [link] (https://groups.google.com/forum/#!topic/google-appengine-java/3rVcmKc7iI4) – Gaurav

+0

Собственный API намного быстрее с точки зрения минимизации вызовов. Возможно, вам стоит взглянуть на объективирование, которое намного ближе к нарциальному слою, и IMHO проще, чем jdo –

+0

Спасибо за это, я попробую использовать Native API, надеюсь, что это сработает. – Gaurav

6

от Google App Engine:

Для каждого нового Entity ГОВОРЯ:

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

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

Это минимум 18 человек.

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

Смежные вопросы