)に関する取組みをご紹介します。2015-09-30ここにハマった!DynamoDBDynamoDBはじめまして。Impulse開発チームの木村です。Cassandraと同じように扱おうとした際に、ハマった点とその解決策を紹介します。(Node.js)を使用しています。テーブルをグループでまとめて整理できない。解決策テーブル名にプレフィックスを付けて整理する。テーブル名に.,_,-を使えるため、これらを区切りとして用いる。key」を定義できない。keyとして使用可能なのは、以下のいずれか。keyが定義できる設計を検討してみる。keyが必要な場合は、たとえば以下のように擬似的に実現する。数値型を使って、日付・時刻型を代替する。QueryNS/SS/BS型は、配列ではないハマった点NS/SS/BS型の値には、同じ要素は1つまでしか入らない。解決策NS/SS/BS型はSetを表すため、そのような動作となる。配列が必要な際は、L型を使う。ValidationExceptionが起きる。解決策AttributeDefinitionsには、key属性のみを含める。Range属性のみへkey条件指定してqueryを行うと、ValidationExceptionが起きる。解決策key条件指定で有効なのは、Hash属性のみへ条件指定Hash属性とRange属性の両方へ条件指定のいずれか。そのため「Range属性のみへkey条件指定」は行えない。「テーブル全体から範囲検索」の実現方法は、例えば以下の方法が考えられる。scanを行うFilterExpressionで、Range属性に対して条件範囲を指定scanが、queryと比べて重い操作であることに注意テーブル内のアイテムすべてで、Hash属性の値を同じにするkey条件として、Hash属性にその値を指定し、Range属性に範囲を指定して、queryを行うHash属性がすべて同じだと、すべてのアイテムが同じpartitionに保存されることに注意もちろん、「テーブル全体から範囲検索する必要のない」設計の場合は、このハマりは回避できる。2といったSQL文を、queryに指定できない。解決策SQL文の内容を、(可能な場合は)queryのパラメータに翻訳する。上記のSQL文では以下のよう。数値や文字列を書くと、ValidationExceptionが起きる。Expressionにはそのプレースホルダー名を書く。ValidationExceptionが起きる。:to"}解決策KeyConditionExpressionでの条件指定は、1つのkeyに1つの条件まで。この例の場合は、BETWEENを使うことで制限を回避する。to"}Expressionには、含めてはならない予約語があるハマった点Expression(KeyConditionExpressionやProjectionExpressionなど)に含まれる属性名が予約語と被ると、ValidationExceptionが起きる。Expressionにはそのプレースホルダー名を記述する。一度に取得できるテーブル名の数に限界があるハマった点listTablesが返すテーブル名の数は、最大100個。このため、すべてのテーブル名を一度に取得できないことがある。すべてのテーブル名を取得する。「ひとつ前に実行したlistTablesのレスポンスに含まれるLastEvaluatedTableNameの値」を指定テーブル名を最後まで取得した際は、LastEvaluatedTableNameの値がnullとなる参考テーブルのリストと情報を取得する一度に取得できるアイテムの数に限界があるハマった点query/scanが返すアイテムの数は、最大で1MBを超えない数まで。このため、すべてのアイテムを一度に取得できないことがある。すべてのアイテムを取得する。この繰り返しをAPIが裏で行ってくれる。代入できないハマった点S型の属性に空文字列を代入しようとすると、ValidationExceptionが起きる。解決策DynamoDBの制限のため、空文字列は代入できない。空文字列を代入せずに済む仕様にする必要がある。属性値batchWriteItemで、一度にputできるアイテム数に限界があるハマった点batchWriteItemが一度に受け付けるRequest数は、最大25個。26個以上のアイテムは一度にputできない。解決策アイテムは、25個以下ずつputする。ValidationExceptionが起きる。同じアイテムかどうかは、同じkey属性値かどうかで決まる。以下の、どのパターンでも起きる。重複しないようにする。「オブジェクトの配列から複数のRequestを自動生成する場合」などに注意。Requestの生成前か生成後に、重複排除のためのfilteringを行うなどして対処する。参考BatchWriteItembatchWriteItem成功時、全Requestが成功したとは限らないハマった点batchWriteItemの成功は、すべてのRequestの成功を保証しない。失敗したRequestを特定して、ケアする必要がある。これを用いて、batchWriteItemを再び実行する。バッチオペレーションおわりに開発中にDynamoDBでハマった点を紹介しました。落ち着いて理解/実験していけば、何とかなるものです(と信じたい)。ハマりすぎて落ち着けなくなったら、帰りましょう。22:21ここにハマった!DynamoDBTweet関連記事2017-10-25PowerShellDSCでハマったポイントすっかり寒くなってきました。SQLでサーバのログデータを整形・可視化するこんにちは。)に関する取組みをご紹介します。Inc.または関連会社の登録商標およびサービス・マークであり、同社の許可に基づいて使用しています。reserved.ガートナーは、ガートナー・リサーチの発行物に掲載された特定のベンダー、製品またはサービスを推奨するものではありません。最高のレーティング又はその他の評価を得たベンダーのみを選択するように助言するものではありません。ガートナー・リサーチの発行物は、ガートナー・リサーチの見解を表したものであり、事実を表現したものではありません。ガートナーは、明示または黙示を問わず、本リサーチの商品性や特定目的への適合性を含め、一切の保証を行うものではありません。はてなブログをはじめよう!brains-techさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。