1

私はndb datatstoreのテーブルを持っています。その中に私は持っていますエンティティのデータがインデックスされていないと、Google Appデータストアのインデックス作成はどのように機能しますか?

updated = ndb.DateTimeProperty(auto_now_add=True, indexed=False) 
created = ndb.DateTimeProperty(auto_now_add=True, indexed=False) 

この構造で私はテーブルに多くのレコードを持っています。今すぐインデックス化されていないフィールドindexed=Trueを更新しています。したがって、そのテーブルの日付まで存在するすべてupdatedcreatedのデータを索引付けするか、索引付け後に記入する索引付けデータを開始しますか?

これらの列の索引付けされていない行をどのように索引付けしますか。

答えて

2

これらのプロパティは、インデックスを有効にして書き換えるまで、既存のエンティティではインデックスされません。これは、エンティティごとにインデックスが設定されているためです。

これらすべてのフィールドにインデックスを付けるには、すべてのエンティティを読み込んでから書き戻す必要があります。小規模なデータセットの場合は、単純なクエリとループでこれを行います。大規模なデータセットの場合、Cloud Dataflowのようなものを探索したいと思うでしょう。

大規模なデータセットとコストに関する懸念がある場合は、最適化を行うことができます。たとえば、索引付けされたフィールドに対してキーのみの問合せを実行し、そのリストに一致する読取りエンティティがある場合は、索引付けされているため、それを書き戻さないでください。

+0

ありがとうございます!現在、このテーブルには630万行あります。私たちは最近、古いシステムからGAEに移行しました。古いシステムからデータを移動するために、我々が従ったプロセスは以下の通りです。 'read json - >各レコードをタスクとして作成します - >テーブル' asyncにエントリを作成します。何が一番良いと思いますか? –

+0

@Dan McGrath - - この場合のバックアップとリストアのオプションはありますか?このページのドキュメントには、「バックアップにはインデックスが含まれていないことに注意してください。復元すると、必要なインデックスはアプリケーションでアップロードしたインデックス定義を使用して自動的に再構築されます。 –

+0

@SaiPullabhotlaいいえ、バックアップでは問題のエンティティに「noindex」とタグ付けされるので、復元するとその事実は変わりません。覚えておいて、プロパティインデックスの設定は、あなたが考えるかもしれない種類(aka〜表)ではなく、エンティティごとです。 –

関連する問題