在我的一个NDB模型中,我有一个字段的类型为ndb.JsonProperty(repeated=True, indexed=False)
。
此字段是一个数组,平均而言,它包含约800个元素,看起来像{ac: "i", e: [0, 3], ls: ["a"], s: [0, 2], sn: 9, ts: "2018-06-25T22:35:04.855Z"}
。这些代表文本编辑器中的版本。
在我的应用程序的某些部分中,仅需要这些元素的摘要。例如:ac
属性等于'x'的元素有多少,或者数组的第一个元素与最后一个元素之间经过了几秒钟。
我的问题是,有时我需要获得几个模型,每个模型都有一个包含约800个上述元素的数组。因此,假设我需要处理40个模型* 800个元素= 32000个元素–当GAE允许使用128MB时,这已经导致我的应用程序使用大约150MB的内存。
我试图做一个优化:我只对数据进行一次汇总,并将其存储在一个属性中,因为在某些时候,数组不再改变。这使我可以通过不访问数组来使用更少的内存。但是,当数组更新时,摘要数据可能会过时-可以通过获取数组中最后一个元素的时间戳,并将其与摘要时间戳进行比较来进行验证,如果更新的时间最近,则摘要是过时的。
我的问题是::在Python 2.7中-更具体地说是在使用NDB时-当我访问最后一个元素时是否会像elements[-1]
中那样检索整个数组?还是有一种方法可以将列表从最后一个元素延迟加载到第一个元素?还是有一种优化数据的方法,以便在需要处理时不会占用太多内存?