В одной из моих моделей 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 элементов - это уже заставляет мое приложение использовать около 150 МБ памяти, когда GAE позволяет использовать 128 МБ.
Я пытался провести оптимизацию: я суммирую данные один раз и сохраняю их в свойстве, потому что в какой-то момент массив больше не меняется. Это позволяет мне использовать меньше памяти, не обращаясь к массиву. Но сводные данные могут устареть при обновлении массива - это можно проверить, получив метку времени последнего элемента в массиве и сравнив ее с итоговой меткой времени, если она более поздняя, тогда сводка устарела.
Мой вопрос: в Python 2.7 - точнее, при использовании NDB - будет ли извлечен весь массив при доступе к последнему элементу, как в elements[-1]
? Или есть способ лениво загрузить список из последнего в первый элемент? Или есть способ оптимизировать данные, чтобы я не использовал слишком много памяти, когда мне нужно ее обработать?