Доступ к хранилищу данных ужасно медленный на сервере разработки, если у вас есть несколько объектов - PullRequest
2 голосов
/ 03 февраля 2012

Этот вопрос является продолжением этого вопроса Я задавал ранее.

Как вы, ребята, тестируете свой проект на dev-сервере, если вам нужно иметь несколько объектов в Datastore?

Тот факт, что GAE SDK для Java хранит Datastore в памяти, просто убивает меня.Я не могу создать надежный код, если не могу проверить его на своей машине.Интересно, как другие инженеры справляются с этим.

В настоящее время я должен предварительно загрузить данные в сервлет внутреннего экземпляра из файла .bin, который я помещаю в WEB-INF\.

Затем я тестирую некоторый код в DeferredTask .Следующая строка кода (с использованием Objectify)

List<AnonAnswer> answers = dao.ofy().query(AnonAnswer.class).ancestor(visitor).list();

занимает 1,5 секунд для запуска, где AnonAnswer так же просто, как

public class AnonAnswer extends Answer implements Serializable {
    @Parent Key<Visitor> parent;

    public AnonAnswer() {
    }

    public Key<Visitor> getParent() {
        return parent;
    }

    public void setParent(Key<Visitor> parent) {
        this.parent = parent;
    }
}

и у меня 2K Visitorи ~ 60K AnonAnswer объектов.local_db.bin это всего лишь 49 МБ.Почему это медленно?Он работает мгновенно (как я и ожидал) в производстве (~ 3 млн. Посетителей на данный момент).

Я готов потратить некоторое время и написать что-то вроде gae-sqlite , но я надеваюнет доступа к записи файла в Java-версии GAE SDK.Я не знаю, почему это работает в версии Python.

Я застрял.Есть предложения?

1 Ответ

0 голосов
/ 03 февраля 2012

Учитывая, что сервер приложений App Engine, похоже, использует какой-то HashMap для хранения объектов, я бы предположил, что существует какое-то хеширование, выполняемое с байтами протокольного буфера или исходным объектом ключа - они могут быть похожимимежду объектами (т.е. идентификатором, родителем и родом), если это так, то вы можете столкнуться со слишком большим количеством столкновений между объектами.

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

...