7

NDB データベースを使用するようにアップグレードすることを検討している AppEngine アプリケーションがあります。

私のアプリケーションには、古いスタイルのデータベース参照を持つ何百万ものオブジェクトがあります。これらの ReferenceProperty 値を KeyProperty 値に変換するための最適な移行パス、または NDB へのアップグレードを可能にするその他のソリューションを知りたいです。

(データベース内のすべての要素の大規模なバッチ処理と、ReferenceProperty に基づいた KeyProperty の計算を伴わないものを望んでいます。エレガントなものがいいでしょう)

db.Model から ndb.Model にアップグレードしたいモデルの例は次のとおりです。

class UserModel(db.Model):
    ....

class MailMessageModel(db.Model):
    m_text = db.TextProperty()   
    m_from = db.ReferenceProperty(reference_class = UserModel)
    m_to = db.ReferenceProperty(reference_class = UserModel)
4

1 に答える 1

12

朗報です。まったく同じデータの読み取りと書き込みext.dbを行うため、永続化されたデータに変更を加える必要はありません。ndb

NDBチートシートからの引用は次のとおりです。

データストアの変更は必要ありません!

ご参考までに、APIが異なっていても、NDBと古いext.dbパッケージはまったく同じデータをデータストアに書き込みます。つまり、データストアへの変換を行う必要はなく、使用するスキーマが同等である限り、NDBコードとext.dbコードをうまく組み合わせることができます。ndb.Key.from_old_key()key.to_old_key( )を使用して、ext.dbキーとNDBキーの間で変換することもできます。

チートシートは、モデル定義を変換するための優れたガイドです。たとえば、変更は次のMailMessageModelように簡単に行う必要があります。

前:

class MailMessage(db.Model):
    m_text = db.TextProperty()
    m_from = db.ReferenceProperty(reference_class=UserModel)
    m_to = db.ReferenceProperty(reference_class=UserModel)

後:

class MailMessage(ndb.Model):
    m_text = ndb.TextProperty()
    m_from = ndb.KeyProperty(kind=UserModel)
    m_to = ndb.KeyProperty(kind=UserModel)

移行を支援するためにチートシートを使用することを強くお勧めします。

于 2013-01-30T01:50:13.893 に答える