#author("2021-05-04T23:22:00+00:00","default:hotate","hotate")
#author("2023-06-04T00:15:41+00:00;2021-05-04T23:22:00+00:00","default:hotate","hotate")
#contents
&tag(AWS, NoSQL);
&tag(AWS,NoSQL);

* 概要 [#h97cee6f]
- [[Amazonクラウド、SSD上の新NoSQLデータベース「DynamoDB」を公開。性能をダイナミックに上げ下げ可能 - Publickey>http://www.publickey1.jp/blog/12/amazonssdnosqldynamodb.html]]
- [[Amazon DynamoDBは高速&拡張可能なNoSQLのDBです | クラスメソッド開発ブログ>http://dev.classmethod.jp/cloud/amazon-dynamodb/]]
- [[第49夜 DynamoDBの高レベルAPIを試す - しんさんの出張所 はてな編>http://d.hatena.ne.jp/shin/20120304/p1]]
- [[【AWS】今更ながらDynamoDB入門 - Qiita>https://qiita.com/maaaato/items/4a0f5c1dcc78677973c9]]
 Consistent Readを設定することで、Writeがすべて反映されたレスポンスが取得出来るようです。これで古いデータを
 取得する事が無くなると思います。
- [[コンセプトから学ぶAmazon DynamoDB【複合キーテーブル篇】 | Developers.IO>https://dev.classmethod.jp/cloud/aws/conceptual-learning-about-dynamodb-composite-key/]]
 この2つのattributeは複合キーとして働きます。つまり、2つの値の組み合わせによって、1つのitemを特定します。
- [[AWS Solutions Architect ブログ: 【AWS Database Blog】DynamoDB におけるパーティションキー設計の手引き>http://aws.typepad.com/sajp/2017/02/choosing-the-right-dynamodb-partition-key.html]]
 複合プライマリキーを利用する。アクセスパターンに合致する場合、複数のattributeを組み合わせてユニークキーを
 構成するようにしましょう。たとえば、customerid + productid + countrycode がパーティション・キーで、
 order_dateがソート・キーである orders テーブルです。
- [[初めてのAWS Lambda ~AWS Lambdaで始めるイベントドリブンアプリケーション (1/5):CodeZine(コードジン)>https://codezine.jp/article/detail/8446]]
 本記事ではAWS Lambdaの概要からユースケース例、そして実際に触ってみることでAWS Lambdaがどういったものか、
 何ができるのかといった点を解説していきます。

** クエリ [#y85ce569]
- [[クエリの操作 - Amazon DynamoDB>https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Query.html#Query.FilterExpression]]
 言い換えると、Query レスポンスからの LastEvaluatedKey を、次の Query リクエストの ExclusiveStartKey として
 使用する必要があります。Query レスポンスに LastEvaluatedKey 要素がない場合、結果の最後のページを取得します。
 (結果セットの最後まで到達したことを確認できるのは、LastEvaluatedKey がないときだけです)
- [[DynamoDB の Scan でテーブルのデータを漏れなく取得する為のメモ - ようへいの日々精進XP>https://inokara.hateblo.jp/entry/2017/12/01/091105]]
 冒頭に掲載したドキュメントの通り LastEvaluatedKey を利用して, 以下のようにレスポンスに LastEvaluatedKey が
 含まれなくなるまでループさせてみると...全てのデータを取得することが出来る
- [[node.js - "Order by" in DynamoDB using params - Stack Overflow>https://stackoverflow.com/questions/40888996/order-by-in-dynamodb-using-params]]
 If ScanIndexForward is false, DynamoDB reads the results in reverse order by sort key value, and then returns the results to the client.
- [[Wrong example on batch_write_item · Issue #1501 · aws/aws-sdk-ruby · GitHub>https://github.com/aws/aws-sdk-ruby/issues/1501]]
 Shared examples are written in a cross-SDK way, which wouldn't take simple attributes into account. 
- [[DynamoDBについて今更調べたのでメモ | 株式会社ランチェスター>https://www.lanches.co.jp/blog/6776]]
 scanとqueryの違い
 Scanでは常にテーブル全体がスキャンされるが、Queryではキー条件のセットを持たずに特定の範囲のキーだけが検索される。
  => Scanは負荷が大きい
 Queryではプライマリキーの属性値だけが検索されるのに対してScanではテーブル内のすべての項目を検索する事が可能。事前に設計できていれば基本的にはQueryのみを使う方が良い

** 書き込み [#ke0d53c6]
- [[DynamoDB 条件付き書き込み - Qiita>https://qiita.com/yuiken/items/de97178a6188c791e502]]
 アイテム作成時に既存のアイテムとキーが衝突したときに、RDBの感覚だと一意性制約でエラーになるのを期待しますが、
 DynamoDBではなんと!上書きしてしまいます。


** 削除 [#l8db2d1c]
- [[BatchWriteItemを利用してAmazon DynamoDBのテーブルを空にする | Developers.IO>https://dev.classmethod.jp/cloud/aws/dynamodb-delete-item-all/]]
 実はBatchWriteItemという操作を使うと25件ずつまとめて削除することができます。


** トリガ [#i0e0ee9f]
- [[DynamoDB Streams を使用したテーブルアクティビティのキャプチャ - Amazon DynamoDB>https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Streams.html]]
 DynamoDB Streams は、DynamoDB テーブル内の項目レベルの変更の時系列シーケンスをキャプチャし、この情報を最大 24 時間ログに
 保存します。アプリケーションは、このログにアクセスし、データ項目の変更前および変更後の内容をほぼリアルタイムで参照できます。
- [[Amazon DynamoDB のトリガー - Amazon DynamoDB>https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Streams.Lambda.html]]
 トリガーを使用すると、DynamoDB テーブル内のデータ変更に対応するアプリケーションを構築できます。
- [[【新機能】Amazon DynamoDB Triggersを使ってDynamoDB StreamsとAWS Lambdaを連携する | Developers.IO>http://dev.classmethod.jp/cloud/aws/dynamodb-streams-cooperates-with-lambda/]]
 今回のアップデートでDynamoDB Streamsを有効にするとDynamoDB内でのアイテムの変化(登録、更新、削除)が
 24時間ストリームとして時間順に流されます。
- [[AWS Lambda編~DynamoDBと連携してみる~ | ナレコムAWSレシピ>http://recipe.kc-cloud.jp/archives/8137]]
 AWS LambdaではEvent SourceとしてDynamoDBを利用することが出来ます。
 上記の機能を使う事でDynamoDBをトリガーにAWS Lambdaで処理をする等が可能となります。

** 一括処理 [#h637deb0]
- [[Amazon DynamoDBがBatchWriteItemに対応しました | Developers.IO>https://dev.classmethod.jp/cloud/amazon-dynamodb-batch-write-items/]]
 追加/削除/置換処理を1回に25個まで同時に処理できる。サイズ制限は全体で1MB。
 アイテムの追加/削除で用いることができるが、既存のアイテムの更新に用いることはできない。
- [[BatchWriteItem - Amazon DynamoDB>https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/APIReference/API_BatchWriteItem.html]]
 The BatchWriteItem operation puts or deletes multiple items in one or more tables. A single call to BatchWriteItem
  can write up to 16 MB of data, which can comprise as many as 25 put or delete requests.


* [[AWS]]連携 [#i33b0ac2]
** [[AmazonSNS]] [#g69e5bd0]
- [[Amazon SNS 通知を使用した Lambda 関数の呼び出し - Amazon Simple Notification Service>https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-lambda.html]]
 Amazon SNS と AWS Lambda は統合されているため、Amazon SNS 通知を使用して Lambda 関数を呼び出すことができます。
- [[AWS IoTとArduinoでセンシングしてみた | mediba Creator × Engineer Blog>http://ceblog.mediba.jp/post/137800318417/aws-iot%E3%81%A8arduino%E3%81%A7%E3%82%BB%E3%83%B3%E3%82%B7%E3%83%B3%E3%82%B0%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F]]
- [[DynamoDB Streamのデータをsocket.ioを使ってブラウザに流す - Qiita>http://qiita.com/horike37/items/8d513dbd2ad84aaf747d]]
-- コメント:外部サーバの立ち上げが必要な点はネック。ブラウザ上でデータが流れるのなら素晴らしい。(2016/09/12)

** Amazon CloudWatch [#tb5240dc]
- [[CloudWatch LogsでAmazonLinux上のApacheエラーログを監視する | Developers.IO>http://dev.classmethod.jp/cloud/cloudwatch-logs-apache/]]

** API Gateway [#ic0a9a5d]
- [[Amazon API GatewayとLambdaを利用したサーバレスなWebアプリを作ってみた>http://service.cresco.co.jp/blog/entry/445]]

* [[Ruby]] [#o6ce0b66]
** API [#h02335e5]
- [[Class: Aws::DynamoDB::Client — AWS SDK for Ruby V3>https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Client.html#query-instance_method]]
 You are viewing documentation for version 3 of the AWS SDK for Ruby
- [[AWS SDK for Ruby の設定 - AWS SDK for Ruby>https://docs.aws.amazon.com/ja_jp/sdk-for-ruby/v3/developer-guide/setup-config.html]]
 AWS SDK for Ruby の設定方法を学習します。

** 事例 [#v2efd7f0]
- [[Amazon DynamoDB の例 - AWS SDK for Ruby>https://docs.aws.amazon.com/ja_jp/sdk-for-ruby/v3/developer-guide/dynamo-examples.html]]
 AWS SDK for Ruby を使用して Amazon DynamoDB サービスにアクセスするには、次の例を使用できます。
- [[Ruby および DynamoDB - Amazon DynamoDB>https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/GettingStarted.Ruby.html]]
 このチュートリアルでは、AWS SDK for Ruby を使用して次の Amazon DynamoDB オペレーションを実行するシンプルなプログラムを作成します。
 Movies というテーブルを作成し、JSON形式のサンプルデータをロードします。
 テーブルで、作成、読み込み、更新、削除のオペレーションを実行します。
 簡単なクエリを実行します。
- [[AWS SDK for Ruby v2 で DynamoDBを使う>https://qiita.com/inouet/items/17cfbac89c5f9efe0840]]
 このめんどくさいオプション指定なんとかならんのか。

* [[Node.js]] [#la4c85d0]
** API [#ud59ed9f]
- [[Class: AWS.DynamoDB.DocumentClient — AWS SDK for JavaScript>https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html]]
 The document client simplifies working with items in Amazon DynamoDB by abstracting away the notion of attribute values.

** 事例 [#u9820b0d]
- [[Loading Credentials in Node.js from the Shared Credentials File - AWS SDK for JavaScript>https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-shared.html]]
 $ AWS_PROFILE=work-account
- [[Node.jsでDynamoDBを操作するためのチートシート[DynamoDB.DocumentClient][AWS]>https://qiita.com/Yuki_BB3/items/83198b4d9daca7ccd746]]
 Dynamo使うならここに書いて有ることだけでかなりのことがイケるはず 
- [[【詳解】JavascriptでDynamoDBを操作する>https://qiita.com/Fujimon_fn/items/66be7b807a8329496899]]
 docClientを使うと、ネイティブなJavascriptのデータ型を自動的にDynamoDB上の型に変換してくれるので、コードが簡潔になります。
- [[Node.js+Dynamo DBでレコードを検索する - Sanwa Systems Tech Blog>https://tech.sanwasystem.com/entry/2016/01/20/143533]]
 DynamoDBのAPIはずいぶん長い間放っておかれていたように思っていたのですが、そのせいか古い情報がまだ数多く残っています。

** dynamodb-doc [#p80ad6c7]
- [[dynamodb-doc - npm>https://www.npmjs.com/package/dynamodb-doc]]
- [[GitHub - awslabs/dynamodb-document-js-sdk: DynamoDB Document SDK in Javascript>https://github.com/awslabs/dynamodb-document-js-sdk]]
 As of September 10, 2015, this version of the Document SDK will be deprecated in favor of the AWS.DynamoDB.DocumentClient in the official AWS SDK for JavaScript. 

* ツール [#h59900c8]
** Workbench [#b4a541ee]
- [[DynamoDB 用の NoSQL Workbench - Amazon DynamoDB>https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/workbench.html]]
 NoSQL Workbench は、DynamoDB テーブルの設計、作成、クエリ、クエリ、クエリ、管理に役立つデータモデリング、データ可視化、クエリ 開発機能を提供する統合可視化ツールです。
 
- [[NoSQL Workbench for Amazon DynamoDB 構築手順 - Qiita>https://qiita.com/beeeyan/items/9cc93c3526d7a53c63d0]] (2020/12/06)
 GUIツールと言っても、「AWSコンソールで十分じゃないか?」と言う意見もあるかもしれませんが、NoSQL Workbenchには各種RDBのGUIツール同様(それ以上に)さまざまな機能が備わっているようです。

** [[MySQL]] [#s689f5cd]
- [[【AWS】DynamoDBからRDS Aurora (MySQL) へデータ移行する - Qiita>https://qiita.com/homines22/items/fe2f9eee7f9e91bd272e]]
 手っ取り早くかつ確実に移行するために、使い捨て(?)のPythonでコードを書きました

* 関連 [#bfaaf9f0]
#related

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS