5

私はレールで多くの開発を行い、python &アプリケーションエンジンを使ってプロジェクトを開発しています。デモプロジェクトからデータマイグレーションとAppEngine

と私がこれまで見てきたが、私は、App Engineのプロジェクトについての質問/懸念を持っている:

データ移行はアプリエンジンで処理されますどのように?たとえば、エンティティ/テーブルの名前(例:Texts to Documents)を変更したり、既存のテーブル(ex:age to dob)のカラムを変更した場合、これが起こったときに古いデータをどのように処理しますか?

ありがとうございます!

答えて

8

短い答えは:それはそれを処理しません。エンティティの名前を変更することはできません。プロパティを変更することはできますが、手動でデータを更新する必要があります。

モデル定義は、データストアに格納されているエンティティをどのように解釈するかというアプリケーションの「ビュー」に過ぎません。私のような定義を持っていた場合:すべての私の既存のデータはとどまる

class MyEntity(db.Model): 
    description = db.TextProperty() 

class MyEntity(db.Model): 
    text = db.TextProperty() 

をそして、私のentiesのtextプロパティを埋めるしばらくの間、自分のアプリケーションを実行し、その後に列を名前を変更それは(人口textプロパティを持つデータストアのエンティティがたくさんいたとおりに。私は私のモデルインスタンスにエンティティをロードしようとした場合にのみ、私は唯一の空なしdescriptionセットを持つエンティティ(、およびtextデータにアクセスする方法はありませんとしてそれらを見るでしょう現在存在しています)。エンティティを保存して(パッティングする)データストアが古いデータを上書きすると、データが失われます。

このようにスキーマを変更した場合や、フィールドタイプを変更した可能性が高い場合。変更を処理するためにデータを前処理するのはあなた次第です。モデルレイヤーは、モデル定義に準拠しなくなったエンティティを読み込んで読み込むと、エラーが発生します。で

  1. のremote_api/remote_api_shell.py
  2. mapreduceライブラリ(特に "マッパー" の部分)

:あなたのデータを更新し、選択した武器があるの、このマニュアル作業を支援するために

remote_api [1]の設定では、ライブデータに対して対話的なPythonセッションを開き、プロダクションサーバー上で直接実行されているかのようにローカル(ほとんど)のスクリプトを実行できます。私はこれが小さな一回限りの仕事のためにデータを修正/クリーンアップする最も簡単な方法だと思っています。あなたがはるかに大きいタスクを持っている場合は、マッパーAPIは、[2]を採用することができ

は、エンティティの何百万人を変えると言うと、可能な限り並行して、このの多くを行うの利点を活用したいと思います。

+0

良い答えが、MapReduceのの言及は偉大な答えになるだろう。 –

+0

クリスおかげさま! @Nick、Mapreduceに言及してくれてありがとう。 – stringo0

1

エンティティの名前を変更することはできません。許可されていません。

モデルの属性の名前を変更した場合(列と呼ばないでください)、AppEngineは古いフィールドの古いデータを無視し、新しいフィールドをNoneに返します。

関連する問題