Всем привет.
Есть задача получить все посты со стен нескольких групп. Количество записей приличное: в самой меньшей - порядка 20 тысяч. Еще нужна информация обо всех комментариях к записям, пользователях, вложениях и даже лайках, так что объем данных выходит немалый. Backend - php 5.6, Yii2. Естественно, сразу обратился к execute c таким запросом:
$count = $this->countPosts();
$iterations = ceil($count / 100 / 25);
for ($i = 0; $i < $iterations; $i++) {
$code = '
var result = [];
var j = 0;
var offset = ' . $i * 2500 . ';
while (j < 25) {
var posts = API.wall.get({"domain": "доменГруппы", "offset": offset, "count": 100});
result.push(posts);
offset = offset + 100;
j = j + 1;
}
return result;
';
$parameters = ['code' => $code];
$result[] = $this->vk->api('execute', $parameters);
}
22 000 постов из одной группы получаются за ~50 сек. Это на порядок быстрее, чем если бы без execute, и даже терпимо, если бы не необходимость получить суммарно 100 000 постов и необъятное число комментариев к ним. Есть варианты оптимизировать быстродействие?