2012-01-19 10 views
4

複数のPersistentList属性を持つオブジェクトをロードすると、リスト全体が自動的にロードされますか?または、ZODBはロードする要素のリストにアクセスするまで待機しますか?後者の場合、要素にアクセスするたびにリスト全体をロードするか、リストの一部のみをロードしますか?はZODB PersistentListsが遅れてロードされていますか?

+2

PersistentListコンテンツ項目は、インデックスでアクセスすると読み込まれます。通常のPythonリストは、ZODBで全体として節約されます。 –

+0

Mikko:これは質問に答えるでしょう - あなたは答えがisnteadのコメントとしてそれを追加する気になりますか? – jsbueno

+0

これはもう少し複雑です。 PersistentList自体は遅延読み込みではありませんが、レコードがPersistentから継承されていれば、ZODB *は*です。私の答えを見てください。 –

答えて

4

の中には、リストがpersistent.Persistentから継承されており、要求に応じてロードされます。

ただし、Persistentから継承しないプリミティブ型およびクラスは、PersistentListインスタンスと共にメモリにロードされます。リストへの変更がZODBに翻訳されるよう

PersistentListは、レコードのためにコミット、変更された場合self._p_changedを設定し、その基本的UserList(及びPersistent)のサブクラスです。

+1

私は、遅延ロードはPersistentオブジェクトの参照の動作でありPersistentListの動作ではないことを強調することが重要だと思います。 Persistentオブジェクトへの参照とPersistentオブジェクトのオブジェクトグラフを使って、std pythonリストで遅延ロードを取得します。 –

関連する問題