2016-01-11 2 views
2

У меня есть настройка сервера с nodejs и Aerospike. Я хочу реализовать разбиение на страницы для перечисления всех данных в наборах аэрокосмической базы данных. Aerospike, похоже, не поддерживает параметры sql-запроса, такие как limit, orderBy или skip. Использование LList частично решает проблему, поскольку данные по умолчанию упорядочены по ключу. Также, возможно, используя список Aerospike Lua, мы можем частично реализовать UDF для использования list.take(number of elements from start). Однако, поскольку набор предположительно будет расти с течением времени, OrderBy и Skip станут очень важными и не могут быть эффективно реализованы фильтрацией UDF. Можно ли предположить, как справиться с этим?Pagination with Aerospike Nodejs client

+0

Take изменит список. Я предполагаю, что вы хотите найти? Похоже, что NodeJS-клиент находится за тем, что поддерживает сервер и другие клиенты. Вы можете посмотреть, как findFrom (startValue, COUNT) реализован: http://bit.ly/1N3ynLg (проверить реализацию на github java client repo) Все это сводится к вызову правильных UDF на стороне сервера, поэтому если вы узнаете, как вызвать udf для findFrom, вы можете использовать его для разбивки на страницы. Однако вам нужно будет вызывать size() отдельно, если вы не хотите писать UDF, который дает вам как счет, так и данные в одном и том же вызове. –

+1

Заказ не поддерживается, у вас есть только 1 ключ для сортировки. Моделирование с несколькими списками может прийти на помощь. –

+0

Позвольте мне проверить и вернуться к вам – pravin

ответ

0

Как вы уже упоминали, Aerospike не поддерживает ограничение & orderby типа запросов. Способ обойти ограничение заключается в создании вторичного индекса в столбце и запроса вторичного индекса диапазона. Предположим, вы создали столбец с монотонно увеличивающимися значениями. Вы можете сделать запрос диапазона от 1 до 50, а затем от 51 до 100 и так далее.

Вы можете использовать UDF с агрегацией, где вы фильтруете записи. Но это будет не очень эффективно, так как заданное сканирование будет обрабатывать все записи набора, а фильтр UDF даст только 50 (некоторые n) результатов. По мере того, как размер набора увеличивается, вы в конечном итоге теряете массу обработки.