Что означает byBatch(размер) в SnappyDB?

for (String[] batch : snappyDB.allKeysIterator().byBatch(0))

Что означает параметр size в методе byBatch()?

2 ответа

Решение

Без использования byBatch у вас будет только KeyIterator который не реализует Iterator или Iterable поэтому вы не можете использовать его в цикле.

byBatch(n) создает BatchIterable который Iterable и Iterator. Это просто звонкиnext(n) на KeyIterator когда ты звонишь next()в теме. (Источник)

KeyIterator#next(int max) кажется, всегда пытается получить maxэлементы из базы данных. Полагаю, у вас, скорее всего, будетmax элементы в batchмассив из вашего примера на каждой итерации. Так что нет смысла переходить0 как вы это делаете (не уверен, что это вообще работает).


Также при чтении README из репозитория GitHub можно найти некоторую документацию:

Iterable<String[]> byBatch(int size); // Get an iterable of key batch, each batch of maximum [size] keys.

Согласно документации SnappyDB, которая находится здесь:

Iterable<String[]> byBatch(int size);// Get an iterable of key batch, each batch of maximum [size] keys.

Таким образом, размер определяет максимальное количество ключей для каждого пакета. Однако согласно документации:

Обратите внимание, что вы должны использовать итерацию byBatch для обработки всех ключей только в больших коллекциях. В относительно небольших коллекциях использование API на основе массивов (findKeys и findKeysBetween) с формой для (String key: db.findKeys("android")) намного более эффективно. Итераторы следует использовать только для обработки больших коллекций или для просмотра / доступа к подкачке коллекций.

Поэтому убедитесь, что вам действительно нужен byBatch в вашем случае использования.

Другие вопросы по тегам