Google AppEngineでのJDOとJPAfor Java


81

Struts2を使用してGoogleAppEngineでプロジェクトを開発したいと思います。データベースには、JPAとJDOの2つのオプションがあります。提案してくれませんか?どちらも私にとっては新しいものであり、私はそれらを学ぶ必要があります。だから私はあなたの返事の後に1つに焦点を当てます。

ありがとう。

回答:


32

JPAはSunの永続性の標準であり、JDOは私見で死にかけています(実際には、死んでいますが、まだ動いています)。言い換えれば、JPAは長期的にはより良い投資であるように思われます。ですから、両方が初めての場合は、JPAを選択すると思います。


52
JDOは死にかけているわけではなく、別の対象者を対象としています。事実を確認してください。JDOにはJDO2.1、JDO 2.2、そして現在はJDO2.3があります。JDOはデータストアに依存しません。JPAはRDBMSのみを対象としています。事実
DataNucleus

17
ええと、バージョンがいくつあっても、JDOの採用が成功したとは言えないと思います。目を開けてください。JDOには数十億のバージョンがあり、とにかく誰もそれを使用していません(そして、GAEのおかげでJDOが生まれ変わるとは言わないでください)。次に、JPAがRDBMSのみを対象としている場合、このAPIをGoogleのBigTableで使用できる理由を説明してください。ありがとう。
パスカルティベント2009

10
みんな、グーグルがそれを選んだなら、それは死にかけていません。彼らは自分たちが何をしているのか知っています。ちなみに、@ DataNucleusおめでとうございます。彼らがあなたの実装を選ぶのを見てきました。
santiagobasulto 2011年

6
これは悪い答えです。JPAはrdbms固有です。そのため、近年見られた代替データストア(いわゆるNoSQL)の大規模な急増では使用できません。少なくとも醜い妥協をすることなく。したがって、「JPAisdaed」を正解としてマークしないでください
smartnut007 2011

2
人気に基づいてオプションを選択するべきではありません。GAEプラットフォーム全体は大きなテーブルに基づいており、それがJDOの目的です。
FUD 2012年

33

GAE / Jグーグルグループは、まさにこのことについていくつかの投稿をしています。そこで検索して、人の意見を見てみます。あなたは上記の意見とは非常に異なるメッセージを受け取るでしょう。BigTableはRDBMSではないという事実にも注目してください。仕事に適したツールを使用する


3
完全な間違いであるのに、なぜGoogle App Engineはdatanucleus-appengineプラグイン(datanucleus.org/products/accessplatform/appengine/support.htmlを引用)を使用してBigTableデータストアのJPAをサポートするのですか?これについて詳しく説明していただけますか?
パスカルティベント2009

16
非RDBMSデータストアでのJPAサポートには、APIとクエリ言語の妥協が含まれます。多くのものが適合しないため、RDBMS固有であるためサポートされていません(たとえば、JPQLの重要な部分、または多くのJPAアノテーションなど)。その結果、データストア間で完全な移植性を持つことはできません。そのため、BigTableでJPAを使用して、RDBMSストアに使用するものを直接コピーするという議論は誤りです。
dataNucleus

6
一方、JDOの場合、クエリ言語(JDOQL)にはRDBMS固有のコンポーネントがなく、メタデータは全体としてデータベースに依存せず、RDBMS固有のコンポーネントが明確に分離されています。したがって、データストア間の移植性はあります。JDO APIを使用すると、必要に応じてデータストアごとにネイティブクエリ言語を使用できます。
dataNucleus

9
完全なJPAAPIを使用できるとは決して言いませんでしたが、私にとっては、これによってJPAの知識を再利用できなくなるわけではないため、JPAを使用しない正当な理由にはなりません。そしてところで、データストア間の移植性は実際には起こりません
パスカルティベント2009

4
私が何を言おうと、あなたは同意しないので、それは無意味な議論であり、大胆なタイプの必要もありません。はい、クライアントにそれを実行させているので、データストア間の移植性はあります。いつものように、人々はプロジェクトのニーズに基づいて自分で物事を決定する必要があります。これは、DataNucleusのドキュメントで述べられていることです。--Andy(DataNucleus)
DataNucleus

24

- :ちょうどDataNucleusの単独でのJPAとJDOの間のこの比較を見 http://www.datanucleus.org/products/accessplatform_2_1/jdo_jpa_faq.html 目を見張るを。


3
このDatanucleusのマニフェストは非常に親JDOのようです。彼らの発言はすべてJPAに批判的で、JDOを擁護しているように見えますが、JPAを使用する方がJDOを使用するよりも幸せな活動だと思います。
祝福されたオタク2010年

8
DataNucleusはJDOとJPAの両方をサポートしており、実際にはほとんどのJPA2をDN2.0に含めています。他のすべての永続化ソリューションとは異なり、両方を促進し、ユーザーが選択できるようにします。JDOまたはJPAのカバレッジに事実上の誤りがあると思われる場合は、ご意見をお待ちしております。あなたに代わって政治的議題の一部である場合は、自分の気持ちを自分自身に留めておくことをお勧めします
DataNucleus 2010年

16

私はJDOの幸せなユーザーです。良い仕事を続けてください。


2
私は幸せなJDOユーザーです。慣れれば私にはぴったりです。また、JDOを使用すると、永続的なデータ交換を完全に再設計することなく、GAE / JとGoogleBigTableから離れることができます。
イアンマーシャル

12

JDOが死んだと主張する人々にはメリットがないわけではありません。Pro EJB 3 Java Persistence APIの本で私が読んだものは次のとおりです。「その後まもなく、Sunは、JDOが仕様保守モードに縮小され、Java Persistence APIがJDOと他の永続性ベンダーの両方から取得され、単一のサポートになることを発表しました。今後の標準。」著者のMikeKeithは、EJB3の共同仕様リーダーです。もちろん、彼はJPAの大きな支持者ですが、嘘をつくほど偏見があるとは思えません。

JDOはJPAよりも高度な技術的機能を備えていますが、本が出版されたとき、ほとんどの主要ベンダーはJDOではなくJPAの背後で団結していたことは事実です。IBM / OracleなどのEEの世界の大手企業も、RDBMSの大手ベンダーであるため、当然のことです。プロジェクトで非RDMBSよりも多くの顧客がRDMBSを使用しています。JDOは、GAEが大きな後押しをするまで死にかけていました。GAEデータストアはリレーショナルデータベースではないため、これは理にかなっています。一部のJPA機能は、集計クエリ、結合クエリ、所有する多対多の関係など、bigtableでは機能しません。ところで、GAEはJDO 2.3をサポートしますが、JPA1.0のみをサポートします。GAEがターゲットクラウドプラットフォームである場合は、JDOをお勧めします。


11

ちなみに、これはGoogle App Engine(GAE)であるため、Oracle / SunのルールではなくGoogleのルールを使用します。

その下では、JPAはGAEに適さず、不安定であり、期待どおりに機能しません。どちらのグーグルもそれをサポートするつもりはありませんが、最低限です。

そして他の部分については、JDOはGAEで非常に安定しており、(ある程度)Googleによって十分に文書化されています。

ただし、Googleはそれらのいずれも推奨していません。

http://code.google.com/appengine/docs/java/datastore/overview.html

低レベルのAPIは最高のパフォーマンスを提供し、GAEはパフォーマンスがすべてです。

http://gaejava.appspot.com/

たとえば、10個のエンティティを追加します

Python:68ms

JDO:378ms

Java Native:30ms


それは私があなたのテストを実行したときに私が得るような結果ではありません。
code511788465541441 2013年

9

JDOとJPAの間の競争では、datanucleusのポスターにしか同意できません。

まず第一に、そしてまた最も重要なことに、datanucleusの投稿者は彼らが何をしているのかを知っています。結局のところ、彼らは永続的なライブラリを開発しており、リレーショナル以外のデータモデル(Big Tableなど)に精通しています。hibernateの開発者がここにいたと確信しています。「コアライブラリを構築する際のすべての仮定はリレーショナルモデルと緊密に結合されており、hibernateはGAE用に最適化されていません」。

第二に、JPAは間違いなくより広く使用されており、公式のJava EEスタックの一部であることが少し役立ちますが、それが必ずしも優れているとは限りません。実際、JDOについて読んだ場合、JPAよりも高いレベルの抽象化に対応します。JPAは、RDBMSデータモデルと緊密に結合されています。

プログラミングの観点からは、JDO APIを使用する方がはるかに優れたオプションです。これは、概念的に妥協することがはるかに少ないためです。使用するプロバイダーが基盤となるデータベースをサポートしている場合は、理論的には任意のデータモデルに切り替えることができます。(実際には、GAEのオブジェクトに主キーを設定し、Googleなどの特定のデータベースプロバイダーに自分自身を結び付けるため、このような高レベルの透明性を実現することはめったにありません)。ただし、移行はさらに簡単になります。

第三に、Hibernate、Eclipse Link、さらにはGAEでSpringを使用できます。Googleは、アプリケーションの構築に使用したフレームワークを使用できるようにするために多大な努力を払ったようです。しかし、GAEアプリケーションをRDBMSで実行しているかのように構築するときに人々が気付くのは、速度が遅いということです。GAEの春は遅いです。このトピックに関するGoogleIOビデオをグーグルで検索して、それが真実であることを確認できます。

また、基準を遵守することは賢明なことであり、原則として私は称賛します。一方、Java EEスタックの一部であるJPAにより、人々はオプションの概念を失うことがあります。必要に応じて、Java ServerFacesもJavaEEスタックの一部であることを認識してください。そして、それはWebGUI開発のための信じられないほどきちんとしたソリューションです。しかし、結局のところ、なぜ人々、つまり賢い人々がこの標準から逸脱し、代わりにGWTを使用するのでしょうか。

これらすべてにおいて、JPAにとって非常に重要なことが1つあることを述べなければなりません。それがGuiceとJPAの便利なサポートです。グーグルはこの時点でいつもほど賢くなく、今のところJDOをサポートしていないことに満足しているようです。私はまだ彼らがそれを買う余裕があると思います、そして最終的にギスはJDOも飲み込むでしょう...または多分そうではありません。


6

JDOに移動します。経験がなくても習得するのは難しくなく、新しいスキルを身につけることができます!


6

これをJDO書いている時点で使用することについて私がひどいと思うのは、唯一の実装ベンダーでDatanucleusあり、その欠点は次のような多くの問題につながる競争の欠如です。

  1. のようないくつかの側面についてのあまり詳細ではないドキュメント extensions
  2. あなたは通常、(ログをチェックしたことがありますか?それらを持っている理由があるかもしれません)のような著者から皮肉な応答を受け取り、そのような迷惑な応答を受け取ります
  3. 有益な時間内に質問に対する回答が得られない場合があります。7日以内に回答が得られた場合は、ここでも自分の幸運を考慮する必要があります。 StackOverflow

私は常に誰かがJDO仕様を自分で実装し始めることを望んでいます、そうすれば彼らはコミュニティにもっともっとそしてうまくいけばもっと自由な注意を提供し、Datanucleus著者が商業的サポートだけを気にかけていると言っているのではなく、常にサポートの支払いを気にする必要はありません、しかし私はただ言っているだけです。

私は個人的に、Datanucleus作者はDatanucleusそれ自体やそのコミュニティに対して何の義務も負わないと考えています。彼らはいつでもプロジェクト全体を落とすことができ、誰もそれを判断することはできません。それは彼らの努力と彼ら自身の財産です。しかし、あなたは自分が何に入っているのかを知っているべきです。ご覧のとおり、私たちの開発者の1人が使用するフレームワークを探すとき、フレームワークの作成者を罰したり命令したりすることはできませんが、その一方で、作業を完了する必要があります。そのフレームワークを書く時間があったら、そもそもなぜフレームワークを探すのでしょうか?!

一方、JDOそれ自体には、オブジェクトのライフサイクルや、あまり直感的で一般的ではないものなど、いくつかの問題があります(私は思います)。

編集:JPAオブジェクトライフサイクルメカニズムも適用されることがわかったので、標準のORM API(つまりJPAまたはJDO)を使用する場合は、永続化されたエンティティのライフサイクル状態を処理することが避けられないようです。

私が最も気に入っているのJDOは、かなりの労力をかけずに任意のデータベース管理システムを操作できることです。


あなたはほとんどすべての観察について正しいです。ORMは、いくつかの複雑な永続オブジェクト(文字通り、数か月のデバッグ)にとってはお尻の痛みです。プロパティが変更され、コードが新しいバージョンで機能しないため、現在DN2.1でスタックしています。そうは言っても、私の意見では、JDOを使用したDNが進むべき道です。
marcolopes 2017

3

GAE / Jは、年末までにMYSQLを追加する予定です。


2
これのソースはありますか?
テイラーリース2010

1
これが真実だとは思わない、それを裏付ける情報をオンラインで見つけることができない、そして投稿で提供された証拠がないため、反対票を投じました。
スティーブアームストロング

3
ロードマップには、フル機能のSQLデータベースが作品にあることが記載されていますcode.google.com/appengine/business/roadmap.html
Ashwin Prabhu

おかしいですが、今(31-08-2011)私たちはそれがまったく真実ではないことを発見しました。
magallanes 2011

1
違います?GoogleのAppEngine SQLプレビュー(ベータ版)のURLはかなり長いので、goo.gl / AhsxXに短縮しました(信者でない場合に備えて説明する必要があると考えました)。
ビッグリッチ

1

JPAは、標準化されたAPIとしてプッシュされているようで、最近EJB3.0で勢いを増しているため、進むべき道です。JDOは勢いを失ったようです。


1

どちらでもない!

Objectifyを使用します。これは、より安価で(より少ないリソースを使用)、より高速であるためです。参考:http//paulonjava.blogspot.mx/2010/12/tuning-google-appengine.html

Objectifyは、Google AppEngineデータストア用に特別に設計されたJavaデータアクセスAPIです。それは「中間」を占めます。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はどうですか?
タイムレス2015年

1
そして欠点は、ベンダーと緊密に結びつくようになることです。必ずしも問題ではありませんが、JDOの全体的なポイントはそれを回避することです。(おそらく小さなサービスにそれを使用するつもりの人として話します)。
Pijusn 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.