база данных — AND и GROUP BY в Aerospike PHP Client

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

+--------+------------+-----------+------------+-----+--------+
| trx_id | trx_date   | client_id | product_id | qty | total  |
+--------+------------+-----------+------------+-----+--------+
|      1 | 2015-01-01 |         1 |          1 | 100 | 100000 |
|      2 | 2015-01-02 |         2 |          2 | 200 | 200000 |
|      3 | 2015-01-03 |         3 |          3 | 300 | 300000 |
+--------+------------+-----------+------------+-----+--------+

Для отчетности мы обычно делаем что-то вроде:

SELECT MONTH(trx_date), SUM(qty), SUM(total) FROM transaction WHERE client_id = 1 AND product_id = 1 GROUP BY MONTH(trx_date)

получить ежемесячные данные транзакции для клиента.

Я прочитал документацию для PHP-клиента Aerospike и, похоже, не нашел ничего похожего на AND, GROUP BY, или же MONTH,

Итак, каков рекомендуемый способ достижения чего-то подобного в PHP-клиенте Aerospike?

Благодарю.

2

Решение

Aerospike — это хранилище значений ключей NoSQL, поэтому вы не можете ожидать использования SQL с ним. Однако, используя Lua в качестве языка пользовательских функций (UDF), вы можете расширить основные функциональные возможности.

То, что вы ищете, является агрегацией, применяя поток UDF к результатам запроса.

Есть пример реализации GROUP BY x HAVING в документации клиента PHP для Совокупный () метод. Помните, что вы хотите вторичный индекс запрос на удаление как можно большего количества записей, чтобы предикат использовался для «ГДЕ», а вторичная фильтрация для «И» должна происходить внутри фильтра UDF потока при минимально возможном наборе данных.

Чтение Руководство по развитию UDF также поможет.

3

Другие решения

Других решений пока нет …