【问题标题】:Querying AWS DynamoDB to return lat and lon result within radius查询 AWS DynamoDB 以返回半径内的 lat 和 lon 结果
【发布时间】:2016-07-10 20:43:22
【问题描述】:

我对 dynamodb 还很陌生,我用 lambda 和 api 网关设置了它。

我的 dynamodb 表看起来像这样。

现在我只是使用以下 lambda 函数查询表。

var AWS = require('aws-sdk');
var dynamoDB = new AWS.DynamoDB();

exports.handler = function(event, context) {

    /**
     * Debugging events
     * @type {[type]}
     */
    console.log("Request received:\n", JSON.stringify(event));
    console.log("Context received:\n", JSON.stringify(context));

    /**
     * Important this needs to be your Dynamo DB table name
     * @type {String}
     */
    var tableName = "Tracker";
    var datetime = new Date().getTime().toString();

    var queryData = {
        "TableName": tableName,
        "ConsistentRead": true,
        "KeyConditionExpression": "TrackIt = :val",
        "ExpressionAttributeValues": {":val": {"S": event.tid}}
    };
    dynamoDB.query(queryData, function(err, data) {
        if (err) {
            context.fail('ERROR: Dynamo failed: ' + err);
        }else{
            context.done(null,data.Items);
        }
    });

};

现在我想做的是根据某个半径内的纬度和经度值查询表,比如 3 英里,现在我知道如何使用 mysql 执行此操作,但我真的很想知道尝试时从哪里开始做这与 dynamodb。

我真的无法在网上找到任何有用的教程有没有其他人这样做或正在这样做可以为我指明正确的方向,我将不胜感激。

【问题讨论】:

    标签: amazon-web-services lambda amazon-dynamodb


    【解决方案1】:

    您可以使用如下表达式:

    var queryData = {
            "TableName": tableName,
            "ConsistentRead": true,
            "KeyConditionExpression": "#latitude between :min and :max",
            "ExpressionAttributeNames": {
                "#latitude": "latitude",
            },
            "ExpressionAttributeValues": {
                ":min": [MIN_LATITUDE],
                ":max": [MAX_LATITUDE] 
            }
        };
    

    欲了解更多信息:http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.NodeJs.04.html

    【讨论】:

    • 嗨@filipebarretto 那是您的回复,我只是好奇您是否同意上述答案,即 Dynamodb 不是这种设置的好解决方案,也许我应该使用 RDS 而不是它只是好贵。
    • 我相信不只是查询应该支持这个决定。这是关于何时使用 SQL 或不使用 SQL 数据库的链接sitepoint.com/sql-vs-nosql-choose。如果你选择 RDS,t2.micro 实例每月只需 15 美元左右,你可以使用预留实例来降低成本。 (如果我的查询答案适合您,请您投赞成票吗?)
    • 嗨 @filipebarretto 我决定在 EC2 上使用 Slim 框架,因为 RDS 的成本太高了,不想再次被 AWS 赶上,谢谢
    【解决方案2】:

    如果您需要经常支持地理空间查找用例,我不知道 Dynamo 会是一个很好的解决方案。您可以考虑更直接地支持地理空间功能的数据库解决方案。

    【讨论】:

    • 嗨,迈克,感谢您的回复,您建议改用 RDS 数据库吗?
    • @user1503606 也许。我知道 MySQL 和 Postgres RDS 实例具有地理空间功能。不确定其他 RDS 实例类型(MSSQL 和 Oracle)。我确实通过 Google 找到了这个 DynamoDB geohashing 库,它实际上可能为使用 Dynamo 进行基于位置的查找提供了一些选项 - aws.amazon.com/about-aws/whats-new/2013/09/05/…
    猜你喜欢
    • 2011-09-15
    • 1970-01-01
    • 2018-09-05
    • 2019-10-29
    • 2017-02-17
    • 1970-01-01
    • 2013-10-10
    • 2020-12-21
    • 2012-01-08
    相关资源
    最近更新 更多