В настоящее время я изучаю аэроспайк для замены базы данных 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?
Благодарю.
Aerospike — это хранилище значений ключей NoSQL, поэтому вы не можете ожидать использования SQL с ним. Однако, используя Lua в качестве языка пользовательских функций (UDF), вы можете расширить основные функциональные возможности.
То, что вы ищете, является агрегацией, применяя поток UDF к результатам запроса.
Есть пример реализации GROUP BY x HAVING в документации клиента PHP для Совокупный () метод. Помните, что вы хотите вторичный индекс запрос на удаление как можно большего количества записей, чтобы предикат использовался для «ГДЕ», а вторичная фильтрация для «И» должна происходить внутри фильтра UDF потока при минимально возможном наборе данных.
Чтение Руководство по развитию UDF также поможет.
Других решений пока нет …