Покрытие карты Aerospike в Луа - PullRequest
0 голосов
/ 08 мая 2018

Мы хотим удалить элементы из корзины на основе размера. Там будет несколько потоков, которые будут пытаться сделать выше операции. Поэтому написание UDF для этой операции синхронизирует его между потоками. Но remove_by_rank_range не работает внутри lua. Ниже приведена ошибка, которую мы получаем: попытка вызвать поле 'remove_by_rank_range' (нулевое значение)

образец кода Луа:

 function delete(rec)
   local testBinMap = rec.testBin
   map.remove_by_rank_range(testBinMap, 0, 5)
 end

1 Ответ

0 голосов
/ 09 мая 2018

API Lua map не включает большинство операций типа данных Map , реализованных в клиентах (например, MapOperation * 1006 клиента Java). * учебный класс).

Производительность операций с собственной картой значительно выше, так почему бы вам использовать здесь UDF вместо вызова remove_by_rank_range из клиента?

Следующее, что нужно знать, это то, что любая операция записи, будь то UDF или клиент, вызывающий метод map remove_by_rank_range, сначала захватывает блокировку записи. Я ответил на другой вопрос stackoverflow об этом поток запросов . Ваша UDF не дает никакой выгоды описанной вами проблеме по сравнению с операцией карты клиента.

Если вы хотите ограничить размер вашей карты, вы должны делать это в то же самое время, когда вы добавляете новые элементы на карту. Эти две операции будут объединены с operate() - вставкой с последующим удалением. У меня есть пример того, как это сделать в rbotzer / aerospike-cdt-examples .

...