JDO против JPA для Java на Google App Engine
Я хочу разработать свой проект на Google App Engine с Struts2. Для базы данных у меня есть два варианта JPA и JDO. Не могли бы вы, ребята, предложить мне это? Оба являются новыми для меня, и мне нужно их изучить. Поэтому я буду сосредоточен на одном после ваших ответов.
спасибо.
12 ответов:
JPA-это стандарт Sun для настойчивости, JDO-это имхо, умирающий (на самом деле, он мертв, но все еще движется). Другими словами, JPA, по-видимому, является лучшей инвестицией в долгосрочной перспективе. Поэтому я думаю, что выбрал бы JPA, если бы оба были новыми для меня.
группа google GAE/J имеет несколько сообщений об этой самой вещи. Я бы поискал там и посмотрел на мнения людей. Вы получите совсем другое сообщение для мнений, выраженных выше. Также обратите внимание на то, что BigTable не является СУБД. Используйте правильный инструмент для работы
только что видел это сравнение между JPA и JDO самим DataNucleus:- http://www.datanucleus.org/products/accessplatform_2_1/jdo_jpa_faq.html Сенсационное сообщение.
люди, утверждающие, что JDO мертв, не лишены заслуг. Вот что я прочитал в книге Pro EJB 3 JAVA Persistence API: "вскоре после этого Sun объявила, что JDO будет сведен к режиму обслуживания спецификации и что Java Persistence API будет использовать как JDO, так и других поставщиков персистентности и станет единственным поддерживаемым стандартом в будущем.". Автор Майк кит является со-лидером спецификации на EJB3. Конечно, он большой сторонник JPA, но я сомневаюсь, что он предвзят хватит врать.
Это правда, что когда книга была опубликована, большинство крупных поставщиков были объединены за JPA, а не JDO, хотя JDO имеет более продвинутые технические функции, чем JPA. Это неудивительно, потому что крупные игроки в мире EE, такие как IBM/Oracle, также являются крупными поставщиками СУБД. Клиенты используют РСУБД, чем не-реляционной базы данных в своих проектах. JDO в умирала, пока Гэ дал ему большой толчок. Это имеет смысл, потому что хранилище данных GAE не является реляционной базой данных. Некоторые JPA функции не работают с bigtable, такими как запросы агрегации, запросы соединения, принадлежащие отношениям "многие ко многим". Кстати, GAE поддерживает JDO 2.3, а поддерживает только JPA 1.0. Я буду рекомендовать JDO, если GAE является вашей целевой облачной платформой.
для записи это Google App Engine (GAE), поэтому мы играем с правилами Google, а не с правилами Oracle/Sun.
под ним JPA не подходит для GAE, он нестабилен и не работает так, как ожидалось. Ни один Google не готов поддержать его, но голый минимум.
а с другой стороны, JDO довольно стабилен в GAE, и он (в некоторой степени) хорошо документирован Google.
тем не менее, Google не рекомендует их.
http://code.google.com/appengine/docs/java/datastore/overview.html
низкоуровневый API даст лучшую производительность, а GAE-это все о производительности.
например, добавьте 10 сущностей
Python: 68ms
JDO: 378ms
Java Native: 30ms
в гонке между JDO и JPA я могу согласиться только с плакатами datanucleus.
прежде всего, а также самое главное, плакаты datanucleus знают, что они делают. В конце концов, они разрабатывают постоянную библиотеку и знакомы с моделями данных, отличными от реляционных, например, Big Table. Я уверен, что id разработчика для hibernate был здесь, он сказал бы: "все наши предположения при создании наших основных библиотек тесно связаны с реляционной моделью, hibernate не оптимизирован для GAE".
во-вторых, JPA, несомненно, более широко используется, являясь частью официального стека Java EE, немного помогает, Но это не обязательно означает, что он лучше. На самом деле, JDO, если Вы читаете об этом, соответствует более высокому уровню абстракции, чем JPA. JPA тесно связана с моделью данных РСУБД.
с точки зрения программирования использование API JDO является гораздо лучшим вариантом, потому что вы концептуально компрометируете a намного меньше. Теоретически вы можете переключиться на любую модель данных по вашему желанию, если поставщик, который вы используете, поддерживает базовую базу данных. (На практике вы редко достигаете такого высокого уровня прозрачности, потому что вы обнаружите, что устанавливаете свои первичные ключи на объект GAE, и вы будете привязывать себя к конкретному поставщику базы данных, например google). однако все равно будет легче мигрировать.
В-третьих, вы можете использовать Hibernate, Eclipse Link и даже spring с GAE. Гуглить кажется, вы приложили большие усилия, чтобы позволить вам использовать фреймворки, на которых вы привыкли строить свои приложения. Но то, что люди понимают, когда они строят свои приложения GAE, как если бы они работали на СУБД, - это то, что они медленные. Весна на Гае идет медленно. Вы можете google Google IO видео по этой теме, чтобы увидеть, что это правда.
кроме того, соблюдение стандартов-это хорошая разумная вещь, в принципе я аплодирую. С другой стороны, JPA, являющийся частью стека Java EE, делает людей, по крайней мере раз, теряют свое представление о вариантах. Поймите, если хотите, что Java Server Faces также является частью стека Java EE. И это невероятно аккуратное решение для разработки веб-графического интерфейса. Но в конце концов, почему люди, более умные люди, если можно так сказать, отклоняются от этого стандарта и вместо этого используют GWT?
во всем этом я должен сказать, что есть одна очень важная вещь для JPA. Это Guice и его удобная поддержка для JPA. Кажется, что google был не так умен, как обычно этот пункт и устраивает, ибо пока в не поддерживающем JDO. Я все еще думаю, что они могут себе это позволить, и в конце концов Guice поглотит и JDO... а может и нет.
Go JDO. Даже если у вас нет опыта в этом, это не трудно подобрать, и у вас будет новый навык под вашим поясом!
то, что я думаю, ужасно об использовании
JDO
на момент написания это то, что единственным поставщиком реализации являетсяDatanucleus
и недостатками этого является отсутствие конкуренции, что приводит к многочисленным вопросам, таким как:
- не очень подробная документация о некоторых аспектах, таких как
extensions
- вы обычно получаете саркастические ответы от авторов, таких как (вы проверили журналы ? Может быть, есть причина для их наличия) и раздражающие ответы, такие как это
- вы не получите ответ на свой вопрос в полезное количество времени, иногда, если вы получите ответ менее чем за 7 дней, вы должны считать, что вам повезло, даже здесь
StackOverflow
Я всегда надеюсь, что кто-то начнет реализовывать
JDO
спецификация сами, может быть, тогда они будут предлагать что-то еще и, надеюсь, больше свободный внимание к сообществу и не всегда заботится о том, чтобы быть оплаченным за поддержку, а не говоря этоDatanucleus
авторы заботятся только о коммерческой поддержке, но я просто говорю.Я лично считаю
Datanucleus
авторы не имеют никаких обязательств передDatanucleus
сам по себе ни это сообщество. Они могут отказаться от всего проекта в любое время, и никто не может судить их за это, это их усилия и их собственная собственность. Но вы должны знать, во что ввязываетесь. Видите ли, когда один из нас разработчиков ищет фреймворк для использования, вы не можете наказать или командовать автором фреймворка, но с другой стороны, вам нужно сделать свою работу ! Если бы у вас было время, чтобы написать эту структуру, почему бы вам искать ее в первую очередь ?!С другой стороны,
JDO
сам по себе имеет некоторые осложнения, такие как жизненный цикл объектов и вещи, которые не очень интуитивно понятны и распространены (я думаю).Edit: теперь я тоже знаю
JPA
обеспечивает механизм жизненного цикла объекта, поэтому похоже, что его неизбежность связана с сохраненными состояниями жизненного цикла сущностей, если вы хотите использовать стандарт ORM API (т. е.JPA
илиJDO
)что мне больше всего нравится
JDO
умение работать с любой системой управления базами данных без значительных усилий.
JPA-это путь, поскольку он, похоже, толкался как стандартизированный API и недавно получил импульс в EJB3.0.. JDO, кажется, потерял пар.
ни!
использовать Objectify, потому что дешевле (использовать меньше ресурсов) и быстрее. К вашему сведению: http://paulonjava.blogspot.mx/2010/12/tuning-google-appengine.html
Objectify-это API доступа к данным Java, специально разработанный для Хранилище данных Google App Engine. Он занимает "золотую середину"; легче использование и более прозрачно, чем JDO или JPA, но значительно больше удобно, чем низкоуровневый API. Объективировать разработан, чтобы сделать новички сразу же продуктивны, но также раскрывают всю мощь Хранилище данных GAE.
Objectify позволяет сохранять, извлекать, удалять и запрашивать собственные типизированные объекты.
@Entity class Car { @Id String vin; // Can be Long, long, or String String color; } ofy().save().entity(new Car("123123", "red")).now(); Car c = ofy().load().type(Car.class).id("123123").now(); ofy().delete().entity(c);