在Amazon Dynamo DB中编写复杂查询(数学表达式)

5

我已经从mysql切换到Dynamo DB。在mysql中,我使用了一个查询来获取所有靠近特定纬度和经度的用户。查询如下:

SELECT *,SQRT( POW( 69.1 * ( latitude - $latitude) , 2 ) + POW( 69.1 * ( $longitude - longitude ) * COS( latitude / 57.3 ) , 2 ) ) AS distance FROM coupon WHERE is_active='Y' HAVING distance<=$radius

是否可以创建类似于Dynamo DB的查询。我使用PHP作为后端。

1个回答

9
不,Amazon DynamoDB 不会像这个复杂的 SQL 查询一样直接提供,毕竟,当你想使用 NoSQL 数据库时,必须要放弃某些东西 ;)
然而,考虑到 DynamoDB 是专门为需要快速和可预测性能以及无缝扩展性的用例而开发的,通常意味着大型数据集,因此它与 Amazon Elastic MapReduce (Amazon EMR) 集成,以满足像您这样的用例:

Amazon DynamoDB 还与 Amazon Elastic MapReduce (Amazon EMR) 集成。Amazon EMR 允许企业使用 AWS 上的托管按需 Hadoop 框架对其大型数据集执行复杂分析。[...] 企业还可以使用 Amazon EMR 访问多个存储区(即 Amazon DynamoDB、Amazon RDS 和 Amazon S3)中的数据,在这些组合数据集上进行复杂分析,并将此工作的结果存储在 Amazon S3 中。

你可能需要阅读使用Amazon EMR导出、导入、查询和连接Amazon DynamoDB表格的详细信息,其中总结了使用类似SQL语句(HiveQL)查询实时Amazon DynamoDB数据等内容。虽然HiveQL提供的比DynamoDB本身多一些,但它仍然是一个简单的类SQL查询语言,而像你的数学表达式这样的内容则不包括在内。
对于这些内容,你需要深入了解Hadoop和MapReduce(由DynamoDB EMR集成提供),因为它允许你对数据进行几乎任何操作(例如参见如何使用自定义JAR创建作业流)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接