Amazon Dynamo DB-加入

时间:2018-11-30 04:36:10

标签: nosql amazon-dynamodb

我对Amazon Dynamo DB中的联接有疑问。由于Amazon Dynamo DB是NoSQL数据库,因此不支持联接。我正在寻找用于Dynamo DB表的连接命令的替代解决方案。我正在将Dynamo DB与Android SDK结合使用。

5 个答案:

答案 0 :(得分:1)

无法在Dynamo DB中进行联接。

  • Dynamo数据库表的主键是分区键和排序的组合 键。您需要分区键才能在表中查询。
  • 与关系数据库不同,Dynamo DB表无关 数据类型。因此,在其中使用联接非常复杂。
  

分别查询每个表,并使用结果值继续处理其他表。

答案 1 :(得分:1)

由于DynamoDB是NOSQL数据库,因此不支持RDBMS。因此,您无法在dynamo数据库中联接表。 AWS还有其他支持RDBMS的数据库,例如 AWS Aurora

答案 2 :(得分:0)

DynamoDb是一个NoSQl数据库,因此您无法进行联接。 但是,根据我的经验,如果创建正确的数据库设计,您将无可奈何。使用单个表以及主键和辅助键的组合。 这是文档https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-partition-key-design.html

答案 3 :(得分:0)

您不能在DynamoDB中使用联接,但是可以使用GSI索引在单个表中构建数据,以便可以大多数方式查询数据。

因此,在设计数据库结构之前,您需要列出所有需要的查询并设计数据库结构,主要是据此设置索引。

答案 4 :(得分:0)

免责声明:我在Rockset工作-但我答应了。看到这可以帮助您真正轻松地解决此问题。是的,您不能在DynamoDB上进行联接,但是可以使用与Rockset集成的Dyanmodb间接进行联接。

  1. 在dynamo数据库之间创建集成,从而赋予Rockset读取权限。
  2. 在编辑器上使用JOIN编写SQL查询
  3. 通过Rockset控制台上的“查询Lambda”将SQL查询另存为RESTFUL端点。
  4. 在您的android应用上,向该端点发出HTTP请求并获取查询:

假设您导入了所有适当的库:

public class MainActivity extends AppCompatActivity {
    private String url = "https://api.rs2.usw2.rockset.com/v1/orgs/self/ws/commons/lambdas/LambdaName/versions/versionNumber";
    private String APIKEY = "ApiKey YOUR APIKEY";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new JSONAsyncTask().execute("url");
    }

    class JSONAsyncTask extends AsyncTask<String, Void, Boolean> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected Boolean doInBackground(String... urls) {
            try {
                HttpPost httpPost = new HttpPost(url);
                HttpClient httpclient = new DefaultHttpClient();
                httpPost.addHeader("Authorization" , APIKEY);
                httpPost.addHeader("Content-Type" , "application/json");
                HttpResponse response = httpclient.execute(httpPost);

                int status = response.getStatusLine().getStatusCode();

                if (status == 200) {
                    HttpEntity entity = response.getEntity();
                    String data = EntityUtils.toString(entity);
                    Log.e("foo", data);

                    JSONObject jsono = new JSONObject(data);

                    return true;
                } else {
                    Log.e("foo", "error" + String.valueOf(status));
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {

                e.printStackTrace();
            }
            return false;
        }

        protected void onPostExecute(Boolean result) {

        }
    }
}

从那里,您将获得结果作为日志,然后可以使用该数据执行所需的操作。

虽然不能直接在DyanmoDB上进行JOINS,但如果要构建数据驱动的应用程序,则可以间接使用Rockset。