我目前正在检查aerospike取代我公司的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)
获取客户的月度交易数据。
我已阅读Aerospike PHP客户端的文档,但我似乎找不到与AND
,GROUP BY
或MONTH
类似的内容。
那么,在Aerospike PHP客户端中,推荐的方法是什么?
感谢。
答案 0 :(得分:3)
Aerospike是一个NoSQL键值存储,因此您不能指望使用SQL。但是,使用Lua作为用户定义函数(UDF)语言,可以扩展基本功能。
您要查找的是一个聚合,将here应用于查询结果。
有一个在PHP客户端文档中为stream UDF方法实现GROUP BY x HAVING的示例。要记住的是,您希望aggregate()查询尽可能多地消除记录,以便谓词应该用于'WHERE',而'AND'的二次过滤应该在流UDF内部进行过滤尽可能小的数据集。
阅读secondary index也会有所帮助。