2016-07-10 6 views
2

Ich bin ziemlich neu zu Dynamodb und ich habe es mit Lambda und API-Gateway eingerichtet.Abfrage AWS DynamoDB, um Lat und Lon Ergebnis innerhalb Radius

Meine Dynamobb Tabelle sieht so aus. enter image description here

Jetzt frage ich einfach die Tabelle mit der folgenden Lambda-Funktion ab.

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); 
     } 
    }); 

}; 

Nun, was ich tun möchte, ist die Tabelle in einem gewissen Radius basierend auf Breiten- und Längenwerte abfragen sagen 3 Meilen, jetzt weiß ich, wie dies mit MySQL zu tun, aber ich würde wirklich gerne wissen, wo ich anfangen soll wenn man versucht, dies mit dynamodb zu tun.

Ich kann wirklich keine hilfreichen Tutorials online finden, hat jemand anderes dies getan oder macht das, das mir in die richtige Richtung zeigen könnte, ich würde es wirklich schätzen.

Antwort

1

Sie einen Ausdruck verwenden kann, wie zum Beispiel:

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

Für weitere Informationen: http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.NodeJs.04.html

+0

Hallo @filipebarretto das ist für Ihre Antwort Ich bin nur neugierig würden Sie mit der obigen Antwort, dass Dynamodb ist keine gute Lösung für diese Art von Setup, vielleicht sollte ich ein RDS verwenden, stattdessen ist es nur so teuer. – user1503606

+0

Ich glaube, dass nicht nur die Frage diese Entscheidung unterstützen sollte. Hier finden Sie einen Link, wann Sie SQL oder keine SQL-Datenbanken https://www.sitepoint.com/sql-vs-nosql-choose/ verwenden sollten. Wenn Sie RDS wählen, beträgt die t2.micro-Instanz nur etwa 15 Dollar pro Monat und Sie können reservierte Instanzen verwenden, um die Kosten zu senken. (Wenn meine Frage Antwort Ihnen entspricht, könnten Sie bitte upvote es?) – filipebarretto

+0

Hallo @filipebarretto ich habe beschlossen, mit Slim Rahmen auf EC2 für die Kosten zu gehen RDS ist viel zu teuer und will nicht wieder mit AWS wieder erwischt werden – user1503606

0

Ich weiß nicht, dass Dynamo eine gute Lösung sein wird, wenn Sie häufig geospatial Unterstützung benötigen, um Nachschlagen von Anwendungsfällen. Sie könnten Datenbanklösungen in Betracht ziehen, die die Geodatenfunktionalität direkter unterstützen.

+0

Hallo Mike Vielen Dank für Ihre Antwort. Würden Sie stattdessen eine RDS-Datenbank vorschlagen? – user1503606

+0

@ user1503606 Vielleicht. Ich weiß, dass RDS-Instanzen von MySQL und Postgre Geo-Funktionalitäten haben. Nicht sicher über andere RDS-Instanztypen (MSSQL und Oracle). Ich habe diese DynamoDB-Geohashing-Bibliothek über Google gefunden, die möglicherweise einige Optionen für standortbasierte Suchvorgänge mit Dynamo bietet - https://aws.amazon.com/about-aws/whats-new/2013/09/05/ Ankündigung-Amazon-Dynamodb-Geospatial-Indexierung / –