Nano Hash - криптовалюты, майнинг, программирование

Как написать UDF потока Aerospike для запроса диапазона

Я написал Stream UDF для запроса диапазона, и он не работает должным образом. Вы знаете, как установить множество фильтров с помощью lua?

Запрос:

SELECT id1, id2, link_type, visibility, data, time, version FROM linktable
WHERE id1 = <id1> AND
  link_type = <link_type> AND
  time >= <minTime> AND
  time <= <maxTimestamp> AND
  visibility = VISIBILITY_DEFAULT
ORDER BY time DESC LIMIT <offset>, <limit>;

Код Java для вызова этой функции lua:

stmt = new Statement();
stmt.setNamespace(dbid);
stmt.setSetName("links");
stmt.setIndexName("time");
stmt.setFilters(Filter.range("time", minTimestamp, maxTimestamp));
stmt.setAggregateFunction("linkbench", "check_id1", Value.get(id1));
stmt.setAggregateFunction("linkbench", "check_linktype", Value.get(link_type));
resultSet = client.queryAggregate(null, stmt, "linkbench", "check_visibility", Value.get(VISIBILITY_DEFAULT));

Луа-скрипт:

local function map_links(record)
    -- Add user and password to returned map.
    -- Could add other record bins here as well.
    return record.id2
end

function check_id1(stream,id1)
    local function filter_id1(record)
        return record.id1 == id1
    end
    return stream : filter(filter_id1) : map(map_links)
end

function check_linktype(stream,link_type)
    local function filter_linktype(record)
        return record.link_type == link_type
    end
    return stream : filter(filter_linktype) : map(map_links)
end

function check_visibility(stream,visibility)
    local function filter_visibility(record)
        return record.visibility == visibility
    end
    return stream : filter(filter_visibility) : map(map_links)
end

Любая идея, как написать фильтр для всех ограничений запроса?

Благодарю вас!

28.11.2016


Ответы:


1

Начиная с выпуска 3.12 и предикатный фильтр был бы правильным подходом, позволяющим полностью отказаться от Lua для повышения производительности и масштабируемости.

Взгляните на класс PredExp клиент Java и его примеры создания сложных фильтров. Фильтрация предикатов в настоящее время также существует для C, C# и Go клиенты.

15.07.2017
  • Просто примечание: вы не можете выполнить ORDER BY на стороне сервера. Вам придется перехватывать записи, соответствующие фильтру предиката, на стороне приложения и сортировать их там. 15.07.2017
  • Замечательно. Я почти потратил пару дней на то, чтобы понять, как объединить несколько фильтров в Aerospike. Теперь все работает. Большое спасибо 26.02.2020

  • 2

    Множественные функции агрегирования не поддерживаются. Функции агрегации и фильтрации должны быть объединены.

    function combined_aggregation(stream,id1,link_type,visibility)
        local function combined_filter(record)
            return record.id1 == id1 and 
                   record.link_type == link_type and
                   record.visibility == visibility
        end
        return stream : filter(combined_filter) : map(map_links)
    end
    
    13.12.2016
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..