В моем скрипте я использую службу кэширования для хранения больших строк, разбитых на куски по 100 КБ. Недавно я обнаружил getAll
метод, который сильно ускоряет процесс. К сожалению, это иногда ненадежно - он имеет тенденцию пропускать ключи при попытке загрузить много ключей одновременно (чаще всего, когда количество ключей превышает 200). Забавно, что, если я соберу недостающие ключи и снова наберу getAll
только с отсутствующими ключами, все они успешно загрузятся.
Вы когда-нибудь сталкивались с подобной проблемой? Сбор данных за несколько getAll
запусков решает мою проблему, но мне просто любопытно, есть ли какие-либо неопределенные ограничения.
Если кому-то интересно, вот мой метод загрузки данных с использованием getAll
:
PaginatedCache.prototype._getChunksAsync = function(expectedChunkKeys) {
var expectedChunkCount = expectedChunkKeys.length;
var fetchedChunks = {};
var fetchedChunkKeys = [];
// This is done in loop, because it sometimes happens that Google cache's getAll
// method randomly missing some keys, most often when the number of keys is greater than 200.
// Fetching the missing keys again using getAll solves the problem.
while (fetchedChunkKeys.length < expectedChunkCount) {
console.log(expectedChunkCount - fetchedChunkKeys.length, 'keys need to be loaded');
var missingKeys = this._getMissingKeys(fetchedChunkKeys, expectedChunkKeys);
var fetchedMissingChunks = this.service.getAll(missingKeys);
var fetchedMissingChunkKeys = Object.keys(fetchedMissingChunks);
if (fetchedMissingChunkKeys.length === 0) {
console.log('0 chunks loaded');
}
for (var missingChunkKey in fetchedMissingChunks) {
fetchedChunks[missingChunkKey] = fetchedMissingChunks[missingChunkKey];
}
console.log('Loaded', fetchedMissingChunkKeys.length, 'keys');
fetchedChunkKeys = fetchedChunkKeys.concat(fetchedMissingChunkKeys);
}
return fetchedChunks;
};
Проверьте также мой журнал выполнения скриптов:
РЕДАКТИРОВАТЬ: я добавил простой сценарий с воспроизведением: https://script.google.com/d/1-LkE70P0JJxoTqKGnoCv0mNM6wWHFAWRbFHH1SbWbnQusHuUe53cyRgn/edit?usp=sharing
Пример журнала:
[18-09-01 15:17:06:396 CEST] Value length: 17888891
[18-09-01 15:17:06:409 CEST] Storing chunks test_data, Chunks: 175
[18-09-01 15:17:06:914 CEST] Chunk count in cache:175
[18-09-01 15:17:06:919 CEST] 175 keys need to be loaded
[18-09-01 15:17:07:278 CEST] Loaded 171 keys
[18-09-01 15:17:07:279 CEST] 4 keys need to be loaded
[18-09-01 15:17:07:282 CEST] Missing keys: ["test_data_PC_UNIQUE_KEY2_163","test_data_PC_UNIQUE_KEY2_167","test_data_PC_UNIQUE_KEY2_171","test_data_PC_UNIQUE_KEY2_174"]
[18-09-01 15:17:07:313 CEST] Loaded 4 keys
[18-09-01 15:17:08:510 CEST] Loaded 175 chunks from cache asynchronously