« Route53のアップデート - プライベートDNS、他 | メイン | Amazon WorkSpacesのアップデート - バリューバンドル、ハードウェアのアップグレード、そしてOffice 2013 »

Amazon DynamoDB:  前回紹介しきれなかったアップデート

先日のブログポストで紹介したとおり、JSONサポート、アイテムあたりの最大サイズの引き上げ(64KB->400KB)、無料枠の拡大(月あたり25GBのストレージと2億リクエスト)など、DynamoDBには非常に多くのアップデートがありました。しかし、それでもまだ紹介しきれていない項目があるので、今日はそれらについて語りたいと思います。

  • DynamoDB JavaScript Web Shell - DynamoDB LocalにWeb画面でアクセスできるシェルが組み込まれました。簡単に使いはじめるためのチュートリアルも含まれています。

  • SQL-Like Expressions - このSQLのように書けるExpressionは、NoSQLデータベースのAPIをより使いやすくしてくれて、更にコードの可読性を挙げてくれることでしょう。

  • より洗練された各種条件付け・フィルタリング - この強力であたらしいサーバーサイドフィルタリングはクライアントへの無駄なデータ転送を減らし処理を効率化してくれます。さらにConditional Writeのオーバーヘッドも削減してくれるでしょう。

JavaScript Web Shell

DynamoDB Localにあたらしく、DynamoDB JavaScript Shell(以下、Web Shell)という名のウェブベースのユーザーインターフェイスが追加されました。使い始めるのは簡単です。DynamoDB Localのアーカイブファイルをダウンロードし、それを好きな場所に展開してください。そして以下のようなコマンドで起動します。

C:\temp\L> java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar

Web Shellはポート8000番の/shellというURLでアクセスできます。(ポート番号は変更可能です)

Web Shell1

Web Shellの見た目はこのような形です。左側がコードエディタ、右側がコンソールです。

Web Shell2

JavaScriptのコードをエディタで作成し、Runボタンを押して実行します。例えば下のスクリーンショットはテーブルの作成をしているところです。

Web Shell3

このシェルにはDynamoDBの各APIを呼び出すためのコードテンプレートが含まれています。”</>”というボタンからテンプレートを呼び出し、任意のコードを”<<”でコードエディタにコピーすることができます。また、コードエディタ内でControl + Spaceでコード補完を呼び出すこともできます。

Web Shell4

例えば下記のようなAWS SDK for JavaScript in the Browserを使ってテーブルを作成するコードを生成し、実行することが非常に簡単にできます。

var params = {
    TableName: 'book',
    KeySchema: [
        {
            AttributeName: 'title',
            KeyType: 'HASH',
        }
    ],
    AttributeDefinitions: [
        {
            AttributeName: 'title',
            AttributeType: 'S'
        }
    ],
    ProvisionedThroughput: {
        ReadCapacityUnits: 1,
        WriteCapacityUnits: 1,
    }
};
dynamodb.createTable(params, function(err, data) {
    if (err) print(err); // an error occurred 
    else print(data); // successful response 
});

テーブルにアイテムを挿入することも非常に簡単です。

var params = {
    TableName: 'book',
    Item: { // a map of attribute name to AttributeValue 
        title: "Sample Application: CloudList",
        chapter: 10
    }
};
 
dynamodb.putItem(params, function(err, data) {
    if (err) print(err); // an error occurred 
    else print(data); // successful response 
});

テーブルをScanすることも簡単です。下記はScanの最初の1ページの結果を受け取るコードのサンプルです。

var params = {
    TableName: 'book',
};
dynamodb.scan(params, function(err, data) {
    if (err) print(err); // an error occurred 
    else print(data); // successful response 
});

上記のコードをWeb Shellで実行するとこんなイメージになります。

Web Shell 5

ここまで紹介してきたWeb ShellはDynamoDB Localの一機能として提供されているので、何も新しいセットアップをせずに利用することができます!

SQL-Like Expressions

更に今回、DynamoDBのScanやQueryといったAPIが、よりシンプルでSQLに近いクエリ言語を受け付けるようになりました。たとえば"long.example.com/"から始まっていて、なおかつ"2014-09"以降に作成されたアイテムをScanで取得するなら以下のように実装することができます。

dynamodb.scan({
    TableName: 'Url',
    ProjectionExpression: 'ShortUrl, RedirectTo, Metadata.CreatedBy',
    FilterExpression:
      'begins_with(RedirectTo, :domain) ' +
      'AND Metadata.CreateDate >= :start_date',
    ExpressionAttributeValues: {
        ':domain': 'long.example.com/',
        ':start_date': '2014-09'
    }
}).eachPage(function(err, data) {
    if (err) print(err);
    else if (data) print(data);
});

より洗練された各種条件付け・フィルタリング

今年の前半、ScanやQuery、Conditional Writeのためのフィルタがリリースされました。今回のアップデートでは更に、ネストされたANDやOR、NOTなどの条件を備えた、よりSQLのWHERE句に近い操作を実行することが可能になりました。これにより、たとえば同じアトリビュートを条件内で何度も指定したり、既存のアトリビュートを比較したりすることもできるようになりました。(これらはいままでのAPIでは実現できませんでした。)

たとえば下記のJavaScriptのスニペットは”Short URL”テーブル(短縮URLサービスを実現するためのテーブルをイメージしてください)をScanします。この操作に対してExpressionを活用し、予め定められたページビュー数に達しておりかつ、"map"というタグを付与されているもしくは"long.example.com"というドメインに紐付けられている、という検索条件を付与しています。

dynamodb.scan({
  TableName: 'Url',
  FilterExpression:
    "(contains(Tags, :tag)) " +
     "OR begins_with(RedirectTo, :domain)) " +
    " AND " +
    "Stats.PageViews > Metadata.TargetViews",
  ExpressionAttributeValues: {
    ":tag": "map",
    ":domain": "long.example.com"
  }
}).eachPage(function(err, data) {
  if (err) print(err);
  else if (data) print(data);
});
 
 
今井

コメント

トラックバック

この記事のトラックバックURL:
http://www.typepad.com/services/trackback/6a00d8341c534853ef01b8d08b5b6f970c

Amazon DynamoDB:  前回紹介しきれなかったアップデートを参照しているブログ:

Featured Event

2016年3 月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31