2011-08-08 10 views
1

私はPHP/MySQLからGoogle App Engineに移行し、データストアとのインターフェイスとしてJDOを使用しています。変更されたPreorder Tree Traversal(MPTT)対応テーブルをJDOモデルに移行するための推奨される方法は何ですか?MPTT、JDOを使用してGoogle App Engineで実装する方法は?

+0

なぜMPTT?おそらく、祖先のリストは、ほとんどの場合、より良い選択肢です。 –

答えて

1

GAEデータストアに階層型データストレージを実装するさまざまな方法で時間を費やした後、直接MPTTを実装することにしました。次のコードスニペットは、モデルを提示:

@PersistenceCapable(identityType = IdentityType.APPLICATION) 
public class MPTTObject { 

    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true") 
    private String encodedKey; 

    @Persistent 
    private String parentEncodedKey; 

    @Persistent 
    private int left; 

    @Persistent 
    private int right; 

データストア処理が集中的読まれている場合解決策はかなりうまく動作しますが、操作は集中的な書き込みしているとき、それはかなり「重い」です。この事実はGAEで操作を完了しなければならない時間制限と組み合わされているため、この解決法はあまり魅力的ではありません。

より効率的であると思われるもう1つのアプローチは、階層内の各ノードの親と子の完全なリストを格納することです。

GAEデータストア上の階層データストレージ上のいくつかの便利なリンクは以下の通りです:

+0

あなたのキーはエンコードされた文字列として保存するべきではありません。代わりに 'Key'オブジェクトとして保存してください。 –

+0

私はエンコードされた文字列を使用する理由は、可能性の低い変更でアプリケーションエンジンの外にアプリケーションを移動できるようにするためです。キーオブジェクトはアプリエンジン固有のものですが、エンコード文字列を使用することで、引き続きインデックスエンジンのアプリエンジンが利用できます。 –

+0

エンコードされた文字列を使用すると、マスター/スレーブからHRDへの移植など、別の問題に遭遇します。 –

関連する問題