1

シンガポールでは、Singpath ( singpath.appspot.com )を使用して学生に Python を教えています。学生に Python でソフトウェアを書く練習をさせることに加えて、ビッグ テーブルにアクセスするために使用される google.appengine.ext.db API に学生を慣れさせたいと考えています。

App Engine アプリで db.Model 設定を変更して、大きなテーブルに書き込むのではなく、ローカルの一時データストアに書き込みまたはアクセスできるようにする最も簡単な方法は何ですか? 単体テストが実行されるたびにgaeunitが新しい一時データストアを作成する方法と同様のことをしようとしています。

from google.appengine.ext import db
import logging

class MyModel(db.Model):
  name = db.StringProperty()

#Configure a temp datastore to be updated instead of bigtable. 

m = MyModel()
m.put() #shouldn't update bigtable
result = MyModel.all() #should fetch from temp datastore

logging.info("There were %s models saved", result.count())
4

1 に答える 1

2

gaeunit のように、必要なときに新しいスタブ データストアを作成することで、開発サーバーでこれを行うことができます。ただし、このコンセプトが実稼働環境に実際に移行するとは思いません。一時データストアには、実際のデータストアまたは memcache のいずれかの何らかのバッキング ストアが必要です。私の知る限り、どちらにも組み込みのサポートはありません。

別の方法は、実際のデータストアをサンドボックス化して使用することです。

db.Model.kind をオーバーライドして、セッション ID のプレフィックスを付けることができます。

@classmethod
def kind(cls):
  return "%s_%s" % (SESSION_ID, cls.__name__)

これにより、ユーザーが作成したエンティティの基本的な名前空間が得られます。

セッション エンティティがある場合は、それをまだ指定していないクエリの親エンティティとして設定できます。これにより、ユーザーのすべてのエンティティが 1 つのエンティティ グループにまとめられます。

いずれの場合も、セッションの開始時に、ユーザーが作成したエンティティをクリーンアップするタスクを後で実行するようにスケジュールできます。

于 2010-07-10T20:37:42.390 に答える