JDO проти JPA для Java на Google App Engine


81

Я хочу розробити свій проект на Google App Engine за допомогою Struts2. Для бази даних у мене є два варіанти JPA та JDO. Будь ласка, запропонуйте мені, будь ласка, це? І те, і інше для мене нове, і мені потрібно їх вивчити. Тож я зосереджусь на одному після ваших відповідей.

Дякую.

Відповіді:


32

JPA - це стандарт Сонця для стійкості, JDO - це ІМХО, яка вмирає (насправді, вона мертва, але все ще рухається). Іншими словами, JPA здається кращою інвестицією в довгостроковій перспективі. Тож, мабуть, я б обрав JPA, якби обидва для мене були новими.


52
JDO не вмирає і націлений на іншу аудиторію. Будь ласка, перевірте свої факти. JDO використовує JDO 2.1, JDO 2.2 і тепер JDO 2.3. JDO не залежить від сховища даних. JPA розрахована виключно на СУБД. Факт
DataNucleus

17
Ну, я не думаю, що ми можемо сказати, що прийняття JDO є успіхом, незалежно від того, скільки версій існує. Розкрийте очі, JDO може мати мільярди версій, і так ніхто не використовує (і, будь ласка, не кажіть мені, що JDO відродиться завдяки GAE). Тоді, якщо JPA націлена виключно на СУБД, поясніть мені, чому ми можемо використовувати цей API із BigTable від Google? Дякую.
Pascal Thivent

10
Хлопці, якщо Google вибрав це, то це не вмирає. Вони знають, що роблять. До речі, Congrats @DataNucleus. Я бачив, як вони обирають вашу реалізацію.
santiagobasulto

6
Це погана відповідь. JPA є специфічним для rdbms. Отже, його не можна використовувати з масовим розповсюдженням альтернативних сховищ даних (так званий NoSQL), який ми спостерігали протягом останніх років. Принаймні, не йдучи на потворні компроміси. Тож, будь ласка, не позначайте "JPA - це" як правильну відповідь
smartnut007

2
Ніколи не слід вибирати варіанти на основі популярності. Вся платформа GAE базується на великому столі, і саме для цього існує JDO!
FUD

33

Гугл-група GAE / J має кілька публікацій саме про це. Я б там обшукав і подивився на думку людей. Ви отримаєте зовсім інше повідомлення щодо думок, висловлених вище. Також зосередьтеся на тому, що BigTable не є СУБД. Використовуйте відповідний інструмент для роботи


3
Чому Google App Engine підтримує JPA для своєї бази даних BigTable, використовуючи плагін datanucleus-appengine (цитуючи datanucleus.org/products/accessplatform/appengine/support.html ), якщо це повна помилка? Чи можете ви детальніше це сказати?
Паскаль Тивент

16
Підтримка JPA у сховищах даних, що не є RDBMS, передбачає компроміси щодо API та мови запитів. Багато речей не підходять, тому не підтримуються, оскільки вони специфічні для RDBMS (наприклад, значні частини JPQL або багато анотацій JPA тощо). Отже, ви не можете мати повну портативність у сховищах даних, і тому будь-який аргумент щодо використання JPA на BigTable як прямої копії для того, що ви використовуєте для сховища RDBMS, є помилковим.
DataNucleus

6
Для JDO, з іншого боку, мова запитів (JDOQL) не має специфічних для RDBMS компонентів, а метадані в цілому нейтральні до бази даних, і компоненти, специфічні для RDBMS, чітко розділені. Отже, у вас є портативність між сховищами даних. API JDO дозволяє використовувати власну мову запитів для кожного сховища даних, де це потрібно.
DataNucleus

9
Я ніколи не говорив, що ви можете використовувати повний API JPA, але, на мій погляд, це не завадить вам повторно використовувати свої знання JPA, тому це просто не поважна причина невикористання JPA. До речі, портативність в базах даних не трапляється в реальному житті .
Паскаль Тивент

4
Що б я не сказав, ви не збираєтеся погоджуватися, тому це безглуздо обговорення, а також не потрібно жирний шрифт. Так, портативність у сховищах даних трапляється, оскільки у мене клієнти роблять саме це. Як завжди, люди повинні вирішувати щось самостійно, виходячи з потреб своїх проектів, про що ми говоримо в документах DataNucleus. --Andy (DataNucleus)
DataNucleus

24

Щойно побачив це порівняння між JPA та JDO самими DataNucleus: - http://www.datanucleus.org/products/accessplatform_2_1/jdo_jpa_faq.html Відкривач очей.


3
Цей маніфест Datanucleus, здається, дуже про-JDO. Усі їхні висловлювання здаються критичними щодо JPA та оборони JDO, і все ж я вважаю, що використання JPA є більш щасливим, ніж використання JDO.
Благословенний Гік

8
DataNucleus підтримує як JDO, так і JPA, і ми фактично щойно включили більшу частину JPA2 у DN 2.0. Ми просуваємо обидва, на відміну від усіх інших рішень щодо стійкості, і дозволяємо користувачам вибирати. Якщо ви вважаєте, що в будь-якому висвітленні JDO або JPA є фактичні помилки, ми вітаємо вашу інформацію. Якщо частина політичного порядку денного від вашого імені, то вам найкраще радити тримати свої почуття при собі
DataNucleus

16

Я щасливий користувач JDO. Продовжуйте хорошу роботу, хлопці.


2
Я щасливий користувач JDO: це мене влаштовує, як тільки я звик. Крім того, з JDO у мене є можливість відійти від GAE / J та Google BigTable без повного перероблення мого постійного обміну даними.
Ян Маршалл

12

Люди, які стверджують, що JDO мертвий, не без заслуг. Ось що я прочитав у книзі Pro EJB 3 Java Persistence API: "Незабаром Sun оголосив, що JDO буде зведений до режиму обслуговування специфікації, і що Java Persistence API буде використовувати як JDO, так і інших постачальників стійкості і стане єдиним підтримуваним стандарт вперед. " Автор Майк Кіт - лідер спільної специфікації EJB3. Звичайно, він є великим прихильником JPA, але я сумніваюся, що він досить упереджений, щоб брехати.

Це правда, що коли книга була опублікована, більшість основних постачальників об'єднувались за JPA, а не за JDO, хоча JDO має більш розширені технічні функції, ніж JPA. Це не дивно, оскільки такі великі гравці у світі ЕЕ, як IBM / Oracle, також є великими постачальниками СУБД. Більше клієнтів використовують RDMBS, ніж не RDMBS у своїх проектах. JDO вмирав, поки GAE не дав йому значного поштовху. Це має сенс, оскільки сховище даних GAE не є реляційною базою даних. Деякі функції JPA не працюють з великими таблицями, такими як запити агрегування, запити на приєднання, відносини багато-до-багатьох. До речі, GAE підтримує JDO 2.3, тоді як підтримує лише JPA 1.0. Я буду рекомендувати JDO, якщо GAE є вашою цільовою хмарною платформою.


11

Для протоколу це 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 - це все про продуктивність.

http://gaejava.appspot.com/

Наприклад, додайте 10 об'єктів

Python: 68 мс

JDO: 378 мс

Рідна мова Java: 30 мс


Це не такі результати, які я отримую, коли я запускаю ваші тести.
code511788465541441

9

У змаганні між JDO та JPA я можу погодитись лише з плакатами ядерних даних.

Перш за все, а також найголовніше, плакати datanucleus знають, що вони роблять. Зрештою, вони розробляють стійку бібліотеку і знайомі з іншими моделями даних, крім реляційних, наприклад, "Велика таблиця". Я впевнений, що тут був розробник hibernate, він сказав би: "всі наші припущення при побудові наших основних бібліотек тісно пов'язані з реляційною моделлю, сплячий режим не оптимізований для GAE".

По-друге, JPA, безперечно, широко використовується, оскільки частина офіційного стеку Java EE трохи допомагає, але це не обов'язково означає, що він кращий. Насправді, якщо ви про це читаєте, JDO відповідає вищому рівню абстракції, ніж JPA. JPA тісно пов'язана з моделлю даних RDBMS.

З точки зору програмування, використання JDO API є набагато кращим варіантом, оскільки ви концептуально компрометуєте набагато менше. Ви можете теоретично перейти на будь-яку модель даних за вашим бажанням, за умови, що постачальник, який ви використовуєте, підтримує базову базу даних. (На практиці ви рідко досягаєте такого високого рівня прозорості, оскільки ви виявите, що встановлюєте свої первинні ключі на об'єкті GAE, і будете прив'язуватись до певного постачальника баз даних, наприклад, google). все одно буде легше мігрувати.

По-третє, ви можете використовувати Hibernate, Eclipse Link і навіть пружину з GAE. Здається, Google доклав великих зусиль, щоб дозволити вам використовувати основи, на яких ви звикли будувати свої програми. Але те, що люди розуміють, коли будують свої програми GAE так, ніби вони працюють на СУБД, - це те, що вони повільні. Весна на GAE ПОВІЛЬНА. Ви можете погуглити відео Google IO на цю тему, щоб переконатися, що це правда.

Крім того, дотримання стандартів є хорошою розумною справою, в принципі я аплодую. З іншого боку, JPA, яка є частиною стеку Java EE, зрідка змушує людей втрачати уявлення про варіанти. Зрозумійте, якщо хочете, що Java Server Faces також є частиною стеку Java EE. І це неймовірно охайне рішення для розробки веб-графічного інтерфейсу. Але врешті-решт, чому люди, розумніші, якщо можна так сказати, відхиляються від цього стандарту і замість цього використовують GWT?

У всьому цьому я повинен запевнити, що для JPA існує одна дуже важлива річ. Це Guice та його зручна підтримка для JPA. Здається, що Google не був таким розумним, як зазвичай, у цьому пункті, і зараз він задоволений тим, що не підтримує JDO. Я все ще думаю, що вони можуть собі це дозволити, і врешті-решт Guice також поглине JDO, ... а може, ні.


6

Перейдіть на JDO. Навіть якщо у вас немає досвіду в цьому, його важко підібрати, і ви отримаєте нову навичку під поясом!


6

На мою думку, JDOна момент написання статті це страшно, це те, що єдиним постачальником реалізації є Datanucleusі недоліки цього - відсутність конкуренції, що призводить до багатьох питань, таких як:

  1. Не дуже детальна документація про такі аспекти, як extensions
  2. Зазвичай ви отримуєте саркастичні відповіді від авторів, такі як (Чи перевіряли ви журнали? Можливо, є причина для того, щоб їх мати), і такі надокучливі відповіді
  3. Ви не отримаєте відповіді на своє запитання за корисний проміжок часу, іноді, якщо ви отримаєте відповідь менше ніж за 7 днів, вам слід вважати, що вам пощастило, навіть тут StackOverflow

Я завжди сподіваюся, що хтось сам почне впроваджувати JDOспецифікацію, можливо, тоді вони запропонують щось більше і, сподіваємось, більше вільної уваги до спільноти і не завжди турбуються про те, щоб платити за підтримку, не кажучи, що Datanucleusавтори дбають лише про комерційну підтримку , але я просто кажу.

Я особисто вважаю, що Datanucleusавтори не зобов'язані ні перед Datanucleusсобою, ні перед спільнотою. Вони можуть відмовитися від цілого проекту в будь-який час, і ніхто не може засудити їх за це, це їх зусилля та їх власна власність. Але ви повинні знати, у що потрапляєте. Розумієте, коли хтось із нас, розробників, шукає фреймворк для використання, ви не можете карати або наказувати автору фреймворку, але з іншого боку, вам потрібна ваша робота! Якби у вас був час написати цей фреймворк, чому б ви спочатку шукали його?!

З іншого боку, у JDOсамого є деякі ускладнення, такі як життєвий цикл предметів та інше, що не надто інтуїтивно і часто (я думаю).

Редагувати: Тепер я знаю, що також JPAзастосовується механізм життєвого циклу об'єкта, тому, схоже, неминуче мати справу зі збереженими станами життєвого циклу, якщо ви хочете використовувати стандартний API ORM (тобто JPAабо JDO)

Мені найбільше подобається JDOможливість працювати з БУДЬ-ЯКОЮ системою управління базами даних без значних зусиль.


Ви маєте рацію майже щодо кожного спостереження. ORM - це біль у дупі для деяких складних стійких об’єктів (місяці налагодження, буквально!). На даний момент я застряг у DN 2.1, оскільки властивість було змінено, і мій код не працюватиме в нових версіях. Тим не менш, на мій погляд, DN з JDO - це шлях.
marcolopes

3

GAE / J планується додати MYSQL до кінця року.


2
У вас є джерело для цього?
Тейлор Ліз,

1
Проголосували проти, тому що я не думаю, що це правда, не можу знайти в Інтернеті жодної інформації, яка б її підтримала, і доказів, що містяться в повідомленні, немає.
Steve Armstrong

3
У дорожній карті згадується повнофункціональна база даних SQL, яка знаходиться в роботі code.google.com/appengine/business/roadmap.html
Ашвін Прабху,

Забавно, але зараз (31.08.2011) ми виявили, що це зовсім неправда.
magallanes

1
Неправда? URL-адреса попереднього перегляду SQL (бета) App Engine від Google є досить довгою, тому я скоротив її goo.gl/AhsxX (вважав, що потрібно пояснити на випадок, якщо ви не віруєте ).
Big Rich

1

JPA - це шлях, який, як видається, просувається як стандартизований API, і нещодавно набрав обертів у EJB3.0 .. JDO, здається, втратив силу.


1

Ні того, ні іншого!

Використовуйте Objectify, оскільки це дешевше (використовуйте менше ресурсів) і швидше. FYI: http://paulonjava.blogspot.mx/2010/12/tuning-google-appengine.html

Objectify - це API доступу до даних Java, спеціально розроблений для сховища даних Google App Engine. Він займає "золоту середину"; простіший у використанні та прозоріший, ніж JDO або JPA, але значно зручніший, ніж API низького рівня. Objectify створений для того, щоб зробити початківців відразу ж продуктивними, а також викрити всю потужність сховища даних 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);

це лише для сховища даних? як щодо хмари sql?
позачасовий

1
І мінусом є те, що ви міцно пов’язані з продавцем. Не завжди проблема, але вся суть JDO полягає у тому, щоб уникнути цього. (розмовляючи як той, хто, ймовірно, збирається використовувати його для невеликих послуг).
Pijusn,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.