App Engine Datastore - как просто сохранить и обновить одно значение с помощью Java? - PullRequest
0 голосов
/ 27 июня 2011

Я просмотрел документацию по движку приложений Google, и на самом деле не очень легко понять, о чем они там говорят.Я начал писать новое приложение и уже следую примеру High Replication Datastore.Сохранение нескольких объектов в группе, возможность запрашивать их и показывать на моих веб-страницах jsp.Мой вопрос заключается в том, как сохранить одно значение, а затем обновить его при необходимости.По сути, мне нужно сохранить максимальный идентификатор, который я уже дал.Затем, когда мне нужно добавить новый объект в группу, мне просто нужно прочитать это максимальное значение идентификатора, увеличить его на 1 и сохранить увеличенное значение обратно.Наконец, мне нужно присвоить увеличенное значение моей новой сущности в качестве его идентификатора.

Я должен упомянуть, что я кодирую с помощью Java-сервлетов и JSP.Итак, код Python для меня бесполезен.Мой существующий фрагмент кода следующий.Строка "длинный идентификатор = getNewID ();"должен дать мне это увеличенное значение, а также вернуть увеличенное значение в хранилище данных.Буду признателен за помощь в кодировании метода getNewID ().

    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

    Key doctorTableKey = KeyFactory.createKey("doctorTable", "doctorTableName");
    Entity doctor = new Entity("doctorEntity", doctorTableKey);

    long ID = getNewID();
    String ID = getNewID(datastore, doctor);
    if(ID != -1){
        String name = req.getParameter("name");
        String lastname = req.getParameter("lastname");

        doktor.setProperty("ID", ID);
        doktor.setProperty("name", name);
        doktor.setProperty("lastname", lastname);
        doktor.setProperty("city", req.getParameter("city"));

        datastore.put(doctor);
        resp.sendRedirect("/doctorAdd.jsp?name=" + name + " " + lastname);
    }else{
        resp.sendRedirect("/doctorAdd.jsp?name=ERROR!!!!");
    }

1 Ответ

2 голосов
/ 27 июня 2011

Не устанавливайте свои собственные идентификаторы со счетчиком. Хранилище данных AppEngine автоматически назначит ID вашим сущностям, когда они впервые вставлены, если вы их не предоставите. Проблема с использованием счетчика состоит в том, что это центральная точка, к которой должна прикоснуться каждая вставка; и App Engine не предназначен для масштабирования высокочастотных записей в одни и те же группы объектов (разные группы объектов не являются проблемой). Действительно, они рекомендуют в среднем не более одной записи в секунду на группу объектов.

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

...