2015-04-15 1 views
1

В настоящее время я внедряю клиент Aerospike Python, чтобы сравнить его с нашей реализацией Redis, чтобы узнать, что быстрее и/или более стабильно.Аэрокосмический клиент Python. Модуль UDF для подсчета записей. Не удается зарегистрировать модуль

Я все еще на ступеньках ребенка, в настоящее время базовая функциональность Unit-Testing, например, если я правильно добавляю записи в свой Set. По этой причине я хочу создать функцию для их подсчета.

я видел в Aerospike-х Documentation, что:

«выполнить агрегацию на запрос, сначала необходимо зарегистрировать UDF с базой данных».

Похоже, что это предложенный способ, чтобы агрегации, подсчет и другие пользовательские функции выполнялись в Aerospike.

Поэтому для подсчета записей в наборе у меня есть, я создал следующий модуль:

# "counter.lua" 

function count(s) 
    return s : map(function() return 1 end) : reduce (function(a,b) return a+b end) 
end 

Я пытаюсь использовать функцию aerospike Python клиента зарегистрировать UDF (User Defined Function) модуль:

udf_put (имя файла, udf_type, политика)

Мой код выглядит следующим образом:

# aerospike_client.py: 

# "udf_put" parameters 
policy = {'timeout': 1000} 
lua_module = os.path.join(os.path.dirname(os.path.realpath(__file__)), "counter.lua") #same folder 
udf_type = aerospike.UDF_TYPE_LUA # equals to "0", which is for "Lua" 

self.client.udf_put(lua_module, udf_type, policy) # Exception is thrown here 

query = self.client.query(self.aero_namespace, self.aero_set) 
query.select() 
result = query.apply('counter', 'count') 

генерируется исключение:

exceptions.Exception: (-2L, 'Имя файла должно быть строкой', 'SRC/Главный/клиент/udf.c', 82)


  1. Что я пропускаю или делаю неправильно?
  2. Есть ли способ «отладить» его без компиляции кода C?
  3. Есть ли другой способ подсчета записей в моем наборе? Или я в порядке с модулем Lua?

ответ

1

Во-первых, я не вижу этого исключения, но я вижу ошибку с udf_put, где модуль зарегистрирован, но процесс python зависает. Я вижу, что модуль появляется на сервере с использованием AQL show modules.

I opened a bug с репо на Python на Github, aerospike/aerospike-client-python.

Там в наилучшей практике документ, касающийся развития UDF здесь: https://www.aerospike.com/docs/udf/best_practices.html

В целом используется потоковый-UDF агрегировать записи с помощью функции подсчета является правильным способом это сделать. Имеются примеры here и here.

+0

Это большое исправлено с последним выпуском. У вас была возможность проверить? –

+0

Извините, еще нет возможности проверить, сделаю, когда это возможно! благодаря – AAndronis