Analyticsを組み込む管理コンソールデータストアを使用するスケーラブルウェブアプリケーションにおいて、データの保存というのは難しい問題です。ある時点においてユーザーは数あるウェブサーバの中の一つとやり取りをし、次にユーザーが送信したリクエストは前のリクエストとは違うサーバに送られることがあります。全てのウェブサーバは、多くのマシン(おそらく世界中の異なる場所にある)にまたがっているデータとやり取りをする必要があります。Engineを使えば、何も気にする必要はありません。—そして強力なクエリとトランザクションも同様に使用できます。複数のデータセンタにまたがってデータを複製します。データは、エンティティとして知られるオブジェクト内の、データストアに書き込まれます。各エンティティは自身を唯一に識別するためのキーを持っています。持っている方のエンティティは、親エンティティの子になります。してデータストア内のエンティティはファイルシステムのディレクトリ構造に似た階層構造空間を形成しています。エンティティの親、親の親、などはそれぞれのアンセスターと呼びます。エンティティの子、子の子、などはそれぞれのデセンダントと呼びます。ルートエンティティです。データストアは致命的な障害に対しては非常に耐性がありますが、データの一貫性保証に関してはあなたがこれまでに馴染んだものと異なっています。共通するアンセスターの持つキーをグループの親キーと呼び、エンティティグループを識別するのに使われます。一つのエンティティグループに対するクエリーはアンセスタークエリーと呼ばれ、特定のエンティティキーではなく親キーを参照します。一貫性の強い結果を返すためにこれらのエンティティグループにアンセスタークエリを使用しています。Consistencyを参照してください。中身を上記に置き換え、ブラウザでhttp://localhost:8080/のページを再読み込みしてください。いくつかメッセージを投稿し、メッセージが保存されて正しく表示されるか確認してください。Engineはindex.yamlを作成したり更新したりします。アップロードしたアプリケーションが必要なインデックスが作成されていないクエリを実行した時にインデックスエラーが表示されます。製品版でインデックスエラーを見逃さないようにするため、アプリケーションをアップロードする前には常にローカルで最低一回は新規クエリをテストしてください。データストアのインデックス設定を参照してください。Python用のデータモデリングAPIが含まれています。Engineのスケーラブルデータストアを使用しています。ndbゲストブックアプリケーションの場合、ユーザーが投稿した挨拶文を保存したいですね。各挨拶文には書いた人の名前、メッセージ文、メッセージが投稿された日時が含まれ、時系列順に表示することができます。以下のコードは今回使用するデータモデルを定義しています。Authorオブジェクトが入ります。contentには文字列が入ります。dateにはdatetime.datetimeの値が入ります。いくつかのプロパティのコンストラクタでは、挙動をより細かく設定するためにパラメータを指定します。ndb.StringPropertyのコンストラクタにindexed=Falseパラメータを指定すると、このプロパティの値はインデックス化されません。プロパティを参照してください。これで挨拶文用のデータモデルの準備ができたので、アプリケーションはこのモデルを使って新規にGreetingオブジェクトを作成してデータストアに格納できます。Greetingオブジェクトを作成し、ユーザーによって投稿されたデータをauthorプロパティとcontentプロパティに設定します。詳細情報についてはトランザクションのページを参照してください。共通のアンセスターを持つオブジェクトは同じエンティティグループに属します。dateプロパティを設定していないので、上記で設定したauto_now_add=Trueが使われ、dateにが現在の時間が自動的に設定されます。新規オブジェクトをデータストアに保存しています。このオブジェクトをクエリから既に取得している場合は、put()で既存のオブジェクトは更新されます。今回はコンストラクタを使ってこのオブジェクトを新規作成しているので、データストアには新規のオブジェクトが追加されます。この例では各挨拶文に同じ親を設定することで、全ての挨拶文を同じエンティティグループに割り当てています。これは、ユーザーには書き込みをした直後に常に挨拶文が表示されるということです。同一のテンティティグループに書き込める速度は1秒につき1回に制限されています。実際にアプリケーションを設計する場合はこのことを覚えておいてください。書き込み直後にエンティティグループをまたぐクエリをした場合に最新の結果が表示されない自体を軽減できます。データストアは、データモデルのための洗練されたクエリーエンジンを持っています。データストアはこれまでのリレーショナルデータベースとは違うため、クエリをSQLでは指定できません。データストアクエリ経由で、もしくはGQLと呼ばれるSQL-ライクのクエリ言語を使います。データストアクエリの全ての機能にアクセスするには、GQLではなくDatastoreの使用を推奨します。ハンドラは前回送信した挨拶文を取得して表示します。データストアクエリは以下の部分で生成されます。データストアインデックスのページで読めます。データストアインデックスの設定で読めます。アカウントを使ってユーザーを認証し、ユーザーがメッセージを送信し、他のユーザーが残したメッセージを表示することができるようになりました。Engineが自動的にスケーリング処理を行うため、アプリケーションを使う人が増えてもこのコードを修正をする必要はありません。ここまで終わった段階では、HTMLのコンテンツとMainPageハンドラのコードが混在している状態です。このままだとアプリケーションの外観を変更するのが難しく、特にアプリケーションが大きく複雑になるにつれてそれが顕著になるでしょう。スタイルシート用の静的ファイルを導入しましょう。Engineに関する著作権は全てそちらに帰属しています。誤訳が判明した場合、より分かりやすい言い回しが見つかった場合、原文が変更された場合などにより、本サイトの内容は予告なく変更されることがあります。誤訳についての指摘や未翻訳部分についての助言など、ご意見についてはこちらへいただけると助かります。翻訳の内容には誤りがある可能性があります。本サイトの記述内容によって不利益が発生した場合も、サイト管理人は一切の責任を負いません。